mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
[escher] Change dynamic view controller paradigm
Change-Id: I57fd41c9b9ad8a1e8b684b97fdf80ddffd71881d
This commit is contained in:
@@ -120,7 +120,9 @@ bool AppsContainer::dispatchEvent(Ion::Events::Event event) {
|
||||
}
|
||||
|
||||
void AppsContainer::switchTo(App * app) {
|
||||
m_window.setTitle(app->upperName());
|
||||
if (app) {
|
||||
m_window.setTitle(app->upperName());
|
||||
}
|
||||
Container::switchTo(app);
|
||||
}
|
||||
|
||||
|
||||
@@ -97,18 +97,17 @@ TextFieldDelegateApp * EditExpressionController::textFieldDelegateApp() {
|
||||
return (App *)app();
|
||||
}
|
||||
|
||||
void EditExpressionController::loadView() {
|
||||
m_historyController->loadView();
|
||||
DynamicViewController::loadView();
|
||||
}
|
||||
|
||||
void EditExpressionController::unloadView() {
|
||||
m_historyController->unloadView();
|
||||
DynamicViewController::unloadView();
|
||||
}
|
||||
|
||||
View * EditExpressionController::createView() {
|
||||
View * EditExpressionController::loadView() {
|
||||
return new ContentView(this, (TableView *)m_historyController->view(), this);
|
||||
}
|
||||
|
||||
void EditExpressionController::unloadView(View * view) {
|
||||
delete view;
|
||||
}
|
||||
|
||||
void EditExpressionController::viewDidDisappear() {
|
||||
DynamicViewController::viewDidDisappear();
|
||||
m_historyController->viewDidDisappear();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -10,17 +10,17 @@
|
||||
namespace Calculation {
|
||||
class HistoryController;
|
||||
|
||||
/* TODO: implement a split view */
|
||||
class EditExpressionController : public DynamicViewController, public Shared::TextFieldDelegate {
|
||||
public:
|
||||
EditExpressionController(Responder * parentResponder, HistoryController * historyController, CalculationStore * calculationStore);
|
||||
void didBecomeFirstResponder() override;
|
||||
void viewDidDisappear() override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
const char * textBody();
|
||||
void setTextBody(const char * text);
|
||||
bool textFieldDidFinishEditing(::TextField * textField, const char * text, Ion::Events::Event event) override;
|
||||
bool textFieldDidAbortEditing(::TextField * textField, const char * text) override;
|
||||
void loadView() override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
class ContentView : public View {
|
||||
public:
|
||||
@@ -38,7 +38,8 @@ private:
|
||||
TextField m_textField;
|
||||
char m_textBody[TextField::maxBufferSize()];
|
||||
};
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
Shared::TextFieldDelegateApp * textFieldDelegateApp() override;
|
||||
HistoryController * m_historyController;
|
||||
CalculationStore * m_calculationStore;
|
||||
|
||||
@@ -171,29 +171,27 @@ int HistoryController::typeAtLocation(int i, int j) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void HistoryController::unloadView() {
|
||||
for (int i = 0; i < k_maxNumberOfDisplayedRows; i++) {
|
||||
assert(m_calculationHistory[i] != nullptr);
|
||||
delete m_calculationHistory[i];
|
||||
m_calculationHistory[i] = nullptr;
|
||||
}
|
||||
DynamicViewController::unloadView();
|
||||
}
|
||||
|
||||
void HistoryController::scrollToCell(int i, int j) {
|
||||
selectableTableView()->scrollToCell(i, j);
|
||||
}
|
||||
|
||||
View * HistoryController::createView() {
|
||||
for (int i = 0; i < k_maxNumberOfDisplayedRows; i++) {
|
||||
assert(m_calculationHistory[i] == nullptr);
|
||||
m_calculationHistory[i] = new HistoryViewCell();
|
||||
}
|
||||
return new CalculationSelectableTableView(this, this, this);
|
||||
}
|
||||
|
||||
CalculationSelectableTableView * HistoryController::selectableTableView() {
|
||||
return (CalculationSelectableTableView *)view();
|
||||
}
|
||||
|
||||
View * HistoryController::loadView() {
|
||||
for (int i = 0; i < k_maxNumberOfDisplayedRows; i++) {
|
||||
m_calculationHistory[i] = new HistoryViewCell();
|
||||
}
|
||||
return new CalculationSelectableTableView(this, this, this);
|
||||
}
|
||||
|
||||
void HistoryController::unloadView(View * view) {
|
||||
for (int i = 0; i < k_maxNumberOfDisplayedRows; i++) {
|
||||
delete m_calculationHistory[i];
|
||||
m_calculationHistory[i] = nullptr;
|
||||
}
|
||||
delete view;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -28,10 +28,10 @@ public:
|
||||
int indexFromCumulatedHeight(KDCoordinate offsetY) override;
|
||||
int typeAtLocation(int i, int j) override;
|
||||
void tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY) override;
|
||||
void unloadView() override;
|
||||
void scrollToCell(int i, int j);
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
private:
|
||||
View * createView() override;
|
||||
CalculationSelectableTableView * selectableTableView();
|
||||
constexpr static int k_maxNumberOfDisplayedRows = 5;
|
||||
HistoryViewCell * m_calculationHistory[k_maxNumberOfDisplayedRows];
|
||||
|
||||
@@ -36,18 +36,6 @@ KDCoordinate ListController::rowHeight(int j) {
|
||||
return functionSize + k_emptyRowHeight - KDText::stringSize(" ").height();
|
||||
}
|
||||
|
||||
void ListController::unloadView() {
|
||||
for (int i = 0; i < k_maxNumberOfRows; i++) {
|
||||
assert(m_functionTitleCells[i] != nullptr);
|
||||
delete m_functionTitleCells[i];
|
||||
m_functionTitleCells[i] = nullptr;
|
||||
assert(m_expressionCells[i] != nullptr);
|
||||
delete m_expressionCells[i];
|
||||
m_expressionCells[i] = nullptr;
|
||||
}
|
||||
Shared::ListController::unloadView();
|
||||
}
|
||||
|
||||
void ListController::editExpression(Function * function, Ion::Events::Event event) {
|
||||
char * initialText = nullptr;
|
||||
char initialTextContent[TextField::maxBufferSize()];
|
||||
@@ -111,14 +99,22 @@ void ListController::removeFunctionRow(Function * function) {
|
||||
}
|
||||
}
|
||||
|
||||
View * ListController::createView() {
|
||||
View * ListController::loadView() {
|
||||
for (int i = 0; i < k_maxNumberOfRows; i++) {
|
||||
assert(m_functionTitleCells[i] == nullptr);
|
||||
m_functionTitleCells[i] = new FunctionTitleCell(FunctionTitleCell::Orientation::VerticalIndicator);
|
||||
assert(m_expressionCells[i] == nullptr);
|
||||
m_expressionCells[i] = new FunctionExpressionCell();
|
||||
}
|
||||
return Shared::ListController::createView();
|
||||
return Shared::ListController::loadView();
|
||||
}
|
||||
|
||||
void ListController::unloadView(View * view) {
|
||||
for (int i = 0; i < k_maxNumberOfRows; i++) {
|
||||
delete m_functionTitleCells[i];
|
||||
m_functionTitleCells[i] = nullptr;
|
||||
delete m_expressionCells[i];
|
||||
m_expressionCells[i] = nullptr;
|
||||
}
|
||||
Shared::ListController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ public:
|
||||
const char * title() override;
|
||||
int numberOfRows() override;
|
||||
KDCoordinate rowHeight(int j) override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
void editExpression(Shared::Function * function, Ion::Events::Event event) override;
|
||||
Shared::ListParameterController * parameterController() override;
|
||||
@@ -27,7 +26,8 @@ private:
|
||||
void willDisplayTitleCellAtIndex(HighlightCell * cell, int j) override;
|
||||
void willDisplayExpressionCellAtIndex(HighlightCell * cell, int j) override;
|
||||
void removeFunctionRow(Shared::Function * function) override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
constexpr static int k_maxNumberOfRows = 5;
|
||||
FunctionTitleCell * m_functionTitleCells[k_maxNumberOfRows];
|
||||
Shared::FunctionExpressionCell * m_expressionCells[k_maxNumberOfRows];
|
||||
|
||||
@@ -81,20 +81,6 @@ IntervalParameterController * ValuesController::intervalParameterController() {
|
||||
return &m_intervalParameterController;
|
||||
}
|
||||
|
||||
void ValuesController::unloadView() {
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
assert(m_floatCells[i] != nullptr);
|
||||
delete m_floatCells[i];
|
||||
m_floatCells[i] = nullptr;
|
||||
}
|
||||
for (int i = 0; i < k_maxNumberOfFunctions; i++) {
|
||||
assert(m_functionTitleCells[i] != nullptr);
|
||||
delete m_functionTitleCells[i];
|
||||
m_functionTitleCells[i] = nullptr;
|
||||
}
|
||||
Shared::ValuesController::unloadView();
|
||||
}
|
||||
|
||||
CartesianFunction * ValuesController::functionAtColumn(int i) {
|
||||
assert(i > 0);
|
||||
int index = 1;
|
||||
@@ -179,16 +165,26 @@ float ValuesController::evaluationOfAbscissaAtColumn(float abscissa, int columnI
|
||||
return function->evaluateAtAbscissa(abscissa, myApp->localContext());
|
||||
}
|
||||
|
||||
View * ValuesController::createView() {
|
||||
View * ValuesController::loadView() {
|
||||
for (int i = 0; i < k_maxNumberOfFunctions; i++) {
|
||||
assert(m_functionTitleCells[i] == nullptr);
|
||||
m_functionTitleCells[i] = new FunctionTitleCell(FunctionTitleCell::Orientation::HorizontalIndicator, KDText::FontSize::Small);
|
||||
}
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
assert(m_floatCells[i] == nullptr);
|
||||
m_floatCells[i] = new EvenOddBufferTextCell();
|
||||
}
|
||||
return Shared::ValuesController::createView();
|
||||
return Shared::ValuesController::loadView();
|
||||
}
|
||||
|
||||
void ValuesController::unloadView(View * view) {
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
delete m_floatCells[i];
|
||||
m_floatCells[i] = nullptr;
|
||||
}
|
||||
for (int i = 0; i < k_maxNumberOfFunctions; i++) {
|
||||
delete m_functionTitleCells[i];
|
||||
m_functionTitleCells[i] = nullptr;
|
||||
}
|
||||
Shared::ValuesController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ public:
|
||||
int activeRow();
|
||||
int activeColumn();
|
||||
Shared::IntervalParameterController * intervalParameterController() override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
CartesianFunction * functionAtColumn(int i) override;
|
||||
bool isDerivativeColumn(int i);
|
||||
@@ -38,7 +37,8 @@ private:
|
||||
CartesianFunctionStore * functionStore() const override;
|
||||
FunctionParameterController m_functionParameterController;
|
||||
FunctionParameterController * functionParameterController() override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
Shared::IntervalParameterController m_intervalParameterController;
|
||||
DerivativeParameterController m_derivativeParameterController;
|
||||
};
|
||||
|
||||
@@ -5,4 +5,5 @@ AppsContainer container;
|
||||
void ion_app() {
|
||||
container.switchTo(container.appAtIndex(0));
|
||||
container.run();
|
||||
container.switchTo(nullptr);
|
||||
}
|
||||
|
||||
@@ -221,6 +221,7 @@ void MathToolbox::viewWillAppear() {
|
||||
}
|
||||
|
||||
void MathToolbox::viewDidDisappear() {
|
||||
Toolbox::viewDidDisappear();
|
||||
m_selectableTableView.deselectTable();
|
||||
}
|
||||
|
||||
|
||||
@@ -87,11 +87,11 @@ void ParametersController::setLaw(Law * law) {
|
||||
}
|
||||
|
||||
void ParametersController::viewWillAppear() {
|
||||
FloatParameterController::viewWillAppear();
|
||||
for (int i = 0; i < m_law->numberOfParameter(); i++) {
|
||||
contentView()->parameterDefinitionAtIndex(i)->setMessage(m_law->parameterDefinitionAtIndex(i));
|
||||
}
|
||||
contentView()->layoutSubviews();
|
||||
FloatParameterController::viewWillAppear();
|
||||
}
|
||||
|
||||
int ParametersController::numberOfRows() {
|
||||
@@ -120,18 +120,6 @@ int ParametersController::reusableParameterCellCount(int type) {
|
||||
return m_law->numberOfParameter();
|
||||
}
|
||||
|
||||
void ParametersController::unloadView() {
|
||||
assert(m_selectableTableView != nullptr);
|
||||
delete m_selectableTableView;
|
||||
m_selectableTableView = nullptr;
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
assert(m_menuListCell[i] != nullptr);
|
||||
delete m_menuListCell[i];
|
||||
m_menuListCell[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView();
|
||||
}
|
||||
|
||||
float ParametersController::parameterAtIndex(int index) {
|
||||
return m_law->parameterValueAtIndex(index);
|
||||
}
|
||||
@@ -165,11 +153,9 @@ I18n::Message ParametersController::okButtonText() {
|
||||
return I18n::Message::Next;
|
||||
}
|
||||
|
||||
View * ParametersController::createView() {
|
||||
assert(m_selectableTableView == nullptr);
|
||||
m_selectableTableView = (SelectableTableView *)FloatParameterController::createView();
|
||||
View * ParametersController::loadView() {
|
||||
m_selectableTableView = (SelectableTableView *)FloatParameterController::loadView();
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
assert(m_menuListCell[i] == nullptr);
|
||||
m_menuListCell[i] = new MessageTableCellWithEditableText(m_selectableTableView, this, m_draftTextBuffer);
|
||||
}
|
||||
ContentView * contentView = (ContentView *)new ContentView(this, m_selectableTableView);
|
||||
@@ -179,6 +165,16 @@ View * ParametersController::createView() {
|
||||
return contentView;
|
||||
}
|
||||
|
||||
void ParametersController::unloadView(View * view) {
|
||||
delete m_selectableTableView;
|
||||
m_selectableTableView = nullptr;
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
delete m_menuListCell[i];
|
||||
m_menuListCell[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView(view);
|
||||
}
|
||||
|
||||
SelectableTableView * ParametersController::selectableTableView() {
|
||||
return m_selectableTableView;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ public:
|
||||
void viewWillAppear() override;
|
||||
int numberOfRows() override;
|
||||
void willDisplayCellForIndex(HighlightCell * cell, int index) override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
HighlightCell * reusableParameterCell(int index, int type) override;
|
||||
int reusableParameterCellCount(int type) override;
|
||||
@@ -25,7 +24,8 @@ private:
|
||||
bool setParameterAtIndex(int parameterIndex, float f) override;
|
||||
bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override;
|
||||
I18n::Message okButtonText() override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
class ContentView : public View {
|
||||
public:
|
||||
ContentView(Responder * parentResponder, SelectableTableView * selectableTableView);
|
||||
|
||||
@@ -231,54 +231,44 @@ int CalculationController::typeAtLocation(int i, int j) {
|
||||
return 4;
|
||||
}
|
||||
|
||||
void CalculationController::unloadView() {
|
||||
assert(m_r2TitleCell != nullptr);
|
||||
delete m_r2TitleCell;
|
||||
m_r2TitleCell = nullptr;
|
||||
assert(m_columnTitleCell != nullptr);
|
||||
delete m_columnTitleCell;
|
||||
m_columnTitleCell = nullptr;
|
||||
for (int i = 0; i < k_maxNumberOfDisplayableRows/2; i++) {
|
||||
assert(m_doubleCalculationCells[i] != nullptr);
|
||||
delete m_doubleCalculationCells[i];
|
||||
m_doubleCalculationCells[i] = nullptr;
|
||||
assert(m_calculationCells[i] != nullptr);
|
||||
delete m_calculationCells[i];
|
||||
m_calculationCells[i] = nullptr;
|
||||
}
|
||||
for (int i = 0; i < k_maxNumberOfDisplayableRows; i++) {
|
||||
assert(m_titleCells[i] != nullptr);
|
||||
delete m_titleCells[i];
|
||||
m_titleCells[i] = nullptr;
|
||||
}
|
||||
TabTableController::unloadView();
|
||||
}
|
||||
|
||||
Responder * CalculationController::tabController() const {
|
||||
return (parentResponder()->parentResponder()->parentResponder());
|
||||
}
|
||||
|
||||
View * CalculationController::createView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)TabTableController::createView();
|
||||
assert(m_r2TitleCell == nullptr);
|
||||
View * CalculationController::loadView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)TabTableController::loadView();
|
||||
m_r2TitleCell = new EvenOddExpressionCell(1.0f, 0.5f);
|
||||
assert(m_columnTitleCell == nullptr);
|
||||
m_columnTitleCell = new EvenOddDoubleBufferTextCell(tableView);
|
||||
for (int i = 0; i < k_maxNumberOfDisplayableRows; i++) {
|
||||
assert(m_titleCells[i] == nullptr);
|
||||
m_titleCells[i] = new EvenOddMessageTextCell(KDText::FontSize::Small);
|
||||
}
|
||||
for (int i = 0; i < k_maxNumberOfDisplayableRows/2; i++) {
|
||||
assert(m_doubleCalculationCells[i] == nullptr);
|
||||
m_doubleCalculationCells[i] = new EvenOddDoubleBufferTextCell();
|
||||
m_doubleCalculationCells[i]->setTextColor(Palette::GreyDark);
|
||||
m_doubleCalculationCells[i]->setParentResponder(tableView);
|
||||
assert(m_calculationCells[i] == nullptr);
|
||||
m_calculationCells[i] = new EvenOddBufferTextCell(KDText::FontSize::Small);
|
||||
m_calculationCells[i]->setTextColor(Palette::GreyDark);
|
||||
}
|
||||
return tableView;
|
||||
}
|
||||
|
||||
void CalculationController::unloadView(View * view) {
|
||||
delete m_r2TitleCell;
|
||||
m_r2TitleCell = nullptr;
|
||||
delete m_columnTitleCell;
|
||||
m_columnTitleCell = nullptr;
|
||||
for (int i = 0; i < k_maxNumberOfDisplayableRows/2; i++) {
|
||||
delete m_doubleCalculationCells[i];
|
||||
m_doubleCalculationCells[i] = nullptr;
|
||||
delete m_calculationCells[i];
|
||||
m_calculationCells[i] = nullptr;
|
||||
}
|
||||
for (int i = 0; i < k_maxNumberOfDisplayableRows; i++) {
|
||||
delete m_titleCells[i];
|
||||
m_titleCells[i] = nullptr;
|
||||
}
|
||||
TabTableController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -31,10 +31,10 @@ public:
|
||||
HighlightCell * reusableCell(int index, int type) override;
|
||||
int reusableCellCount(int type) override;
|
||||
int typeAtLocation(int i, int j) override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
Responder * tabController() const override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
constexpr static int k_totalNumberOfRows = 11;
|
||||
constexpr static int k_totalNumberOfColumns = 2;
|
||||
constexpr static int k_maxNumberOfDisplayableRows = 10;
|
||||
|
||||
@@ -36,26 +36,24 @@ void StoreController::willDisplayCellAtLocation(HighlightCell * cell, int i, int
|
||||
mytitleCell->setExpression(m_titleLayout[i]);
|
||||
}
|
||||
|
||||
void StoreController::unloadView() {
|
||||
for (int i = 0; i < k_numberOfTitleCells; i++) {
|
||||
assert(m_titleCells[i] != nullptr);
|
||||
delete m_titleCells[i];
|
||||
m_titleCells[i] = nullptr;
|
||||
}
|
||||
Shared::StoreController::unloadView();
|
||||
}
|
||||
|
||||
HighlightCell * StoreController::titleCells(int index) {
|
||||
assert(index >= 0 && index < k_numberOfTitleCells);
|
||||
return m_titleCells[index];
|
||||
}
|
||||
|
||||
View * StoreController::createView() {
|
||||
View * StoreController::loadView() {
|
||||
for (int i = 0; i < k_numberOfTitleCells; i++) {
|
||||
assert(m_titleCells[i] == nullptr);
|
||||
m_titleCells[i] = new EvenOddExpressionCell(0.5f, 0.5f);
|
||||
}
|
||||
return Shared::StoreController::createView();
|
||||
return Shared::StoreController::loadView();
|
||||
}
|
||||
|
||||
void StoreController::unloadView(View * view) {
|
||||
for (int i = 0; i < k_numberOfTitleCells; i++) {
|
||||
delete m_titleCells[i];
|
||||
m_titleCells[i] = nullptr;
|
||||
}
|
||||
Shared::StoreController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -12,10 +12,10 @@ public:
|
||||
StoreController(Responder * parentResponder, Store * store, ButtonRowController * header);
|
||||
~StoreController();
|
||||
void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
HighlightCell * titleCells(int index) override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
EvenOddExpressionCell * m_titleCells[k_numberOfTitleCells];
|
||||
Poincare::ExpressionLayout * m_titleLayout[2];
|
||||
};
|
||||
|
||||
@@ -80,18 +80,6 @@ void ListController::selectPreviousNewSequenceCell() {
|
||||
}
|
||||
}
|
||||
|
||||
void ListController::unloadView() {
|
||||
for (int i = 0; i < k_maxNumberOfRows; i++) {
|
||||
assert(m_sequenceTitleCells[i] != nullptr);
|
||||
delete m_sequenceTitleCells[i];
|
||||
m_sequenceTitleCells[i] = nullptr;
|
||||
assert(m_expressionCells[i] != nullptr);
|
||||
delete m_expressionCells[i];
|
||||
m_expressionCells[i] = nullptr;
|
||||
}
|
||||
Shared::ListController::unloadView();
|
||||
}
|
||||
|
||||
void ListController::editExpression(Sequence * sequence, int sequenceDefinition, Ion::Events::Event event) {
|
||||
char * initialText = nullptr;
|
||||
char initialTextContent[TextField::maxBufferSize()];
|
||||
@@ -276,14 +264,22 @@ void ListController::reinitExpression(Shared::Function * function) {
|
||||
selectableTableView()->reloadData();
|
||||
}
|
||||
|
||||
View * ListController::createView() {
|
||||
View * ListController::loadView() {
|
||||
for (int i = 0; i < k_maxNumberOfRows; i++) {
|
||||
assert(m_sequenceTitleCells[i] == nullptr);
|
||||
m_sequenceTitleCells[i] = new SequenceTitleCell(FunctionTitleCell::Orientation::VerticalIndicator);
|
||||
assert(m_expressionCells[i] == nullptr);
|
||||
m_expressionCells[i] = new FunctionExpressionCell();
|
||||
}
|
||||
return Shared::ListController::createView();
|
||||
return Shared::ListController::loadView();
|
||||
}
|
||||
|
||||
void ListController::unloadView(View * view) {
|
||||
for (int i = 0; i < k_maxNumberOfRows; i++) {
|
||||
delete m_sequenceTitleCells[i];
|
||||
m_sequenceTitleCells[i] = nullptr;
|
||||
delete m_expressionCells[i];
|
||||
m_expressionCells[i] = nullptr;
|
||||
}
|
||||
Shared::ListController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ public:
|
||||
void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override;
|
||||
Toolbox * toolboxForTextField(TextField * textField) override;
|
||||
void selectPreviousNewSequenceCell();
|
||||
void unloadView() override;
|
||||
private:
|
||||
Shared::TextFieldDelegateApp * textFieldDelegateApp() override;
|
||||
void editExpression(Sequence * sequence, int sequenceDefinitionIndex, Ion::Events::Event event);
|
||||
@@ -39,7 +38,8 @@ private:
|
||||
void addEmptyFunction() override;
|
||||
void editExpression(Shared::Function * function, Ion::Events::Event event) override;
|
||||
void reinitExpression(Shared::Function * function) override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
static constexpr KDCoordinate k_emptySubRowHeight = 30;
|
||||
constexpr static int k_maxNumberOfRows = 9;
|
||||
SequenceStore * m_sequenceStore;
|
||||
|
||||
@@ -47,20 +47,6 @@ IntervalParameterController * ValuesController::intervalParameterController() {
|
||||
return &m_intervalParameterController;
|
||||
}
|
||||
|
||||
void ValuesController::unloadView() {
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
assert(m_floatCells[i] != nullptr);
|
||||
delete m_floatCells[i];
|
||||
m_floatCells[i] = nullptr;
|
||||
}
|
||||
for (int i = 0; i < k_maxNumberOfSequences; i++) {
|
||||
assert(m_sequenceTitleCells[i] != nullptr);
|
||||
delete m_sequenceTitleCells[i];
|
||||
m_sequenceTitleCells[i] = nullptr;
|
||||
}
|
||||
Shared::ValuesController::unloadView();
|
||||
}
|
||||
|
||||
bool ValuesController::setDataAtLocation(float floatBody, int columnIndex, int rowIndex) {
|
||||
if (floatBody < 0) {
|
||||
return false;
|
||||
@@ -98,16 +84,26 @@ Shared::ValuesFunctionParameterController * ValuesController::functionParameterC
|
||||
#endif
|
||||
}
|
||||
|
||||
View * ValuesController::createView() {
|
||||
View * ValuesController::loadView() {
|
||||
for (int i = 0; i < k_maxNumberOfSequences; i++) {
|
||||
assert(m_sequenceTitleCells[i] == nullptr);
|
||||
m_sequenceTitleCells[i] = new SequenceTitleCell(FunctionTitleCell::Orientation::HorizontalIndicator);
|
||||
}
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
assert(m_floatCells[i] == nullptr);
|
||||
m_floatCells[i] = new EvenOddBufferTextCell();
|
||||
}
|
||||
return Shared::ValuesController::createView();
|
||||
return Shared::ValuesController::loadView();
|
||||
}
|
||||
|
||||
void ValuesController::unloadView(View * view) {
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
delete m_floatCells[i];
|
||||
m_floatCells[i] = nullptr;
|
||||
}
|
||||
for (int i = 0; i < k_maxNumberOfSequences; i++) {
|
||||
delete m_sequenceTitleCells[i];
|
||||
m_sequenceTitleCells[i] = nullptr;
|
||||
}
|
||||
Shared::ValuesController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ public:
|
||||
void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override;
|
||||
I18n::Message emptyMessage() override;
|
||||
IntervalParameterController * intervalParameterController() override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
bool setDataAtLocation(float floatBody, int columnIndex, int rowIndex) override;
|
||||
int maxNumberOfCells() override;
|
||||
@@ -28,7 +27,8 @@ private:
|
||||
EvenOddBufferTextCell * floatCells(int j) override;
|
||||
SequenceStore * m_sequenceStore;
|
||||
SequenceStore * functionStore() const override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
#if COPY_COLUMN
|
||||
Shared::ValuesFunctionParameterController m_sequenceParameterController;
|
||||
#endif
|
||||
|
||||
@@ -114,8 +114,7 @@ void EditableCellTableViewController::didBecomeFirstResponder() {
|
||||
}
|
||||
}
|
||||
|
||||
void EditableCellTableViewController::viewWillAppear() {
|
||||
TabTableController::viewWillAppear();
|
||||
void EditableCellTableViewController::didEnterResponderChain(Responder * previousFirstResponder) {
|
||||
if (selectedRow() == -1) {
|
||||
selectCellAtLocation(0, 1);
|
||||
} else {
|
||||
|
||||
@@ -22,7 +22,7 @@ public:
|
||||
KDCoordinate rowHeight(int j) override;
|
||||
|
||||
void didBecomeFirstResponder() override;
|
||||
void viewWillAppear() override;
|
||||
void didEnterResponderChain(Responder * previousFirstResponder) override;
|
||||
private:
|
||||
TextFieldDelegateApp * textFieldDelegateApp() override;
|
||||
static constexpr KDCoordinate k_cellHeight = 20;
|
||||
|
||||
@@ -25,6 +25,7 @@ void FloatParameterController::didBecomeFirstResponder() {
|
||||
}
|
||||
|
||||
void FloatParameterController::viewWillAppear() {
|
||||
DynamicViewController::viewWillAppear();
|
||||
selectableTableView()->reloadData();
|
||||
if (selectedRow() == -1) {
|
||||
selectCellAtLocation(0, 0);
|
||||
@@ -169,13 +170,6 @@ int FloatParameterController::activeCell() {
|
||||
return selectedRow();
|
||||
}
|
||||
|
||||
void FloatParameterController::unloadView() {
|
||||
assert(m_okButton != nullptr);
|
||||
delete m_okButton;
|
||||
m_okButton = nullptr;
|
||||
DynamicViewController::unloadView();
|
||||
}
|
||||
|
||||
StackViewController * FloatParameterController::stackController() {
|
||||
return (StackViewController *)parentResponder();
|
||||
}
|
||||
@@ -184,16 +178,6 @@ SelectableTableView * FloatParameterController::selectableTableView() {
|
||||
return (SelectableTableView *)view();
|
||||
}
|
||||
|
||||
View * FloatParameterController::createView() {
|
||||
SelectableTableView * tableView = new SelectableTableView(this, this, 0, 1, Metric::CommonTopMargin, Metric::CommonRightMargin, Metric::CommonBottomMargin, Metric::CommonLeftMargin, this);
|
||||
assert(m_okButton == nullptr);
|
||||
m_okButton = new ButtonWithSeparator(tableView, okButtonText(), Invocation([](void * context, void * sender) {
|
||||
FloatParameterController * parameterController = (FloatParameterController *) context;
|
||||
parameterController->buttonAction();
|
||||
}, this));
|
||||
return tableView;
|
||||
}
|
||||
|
||||
void FloatParameterController::buttonAction() {
|
||||
StackViewController * stack = stackController();
|
||||
stack->pop();
|
||||
@@ -203,4 +187,19 @@ I18n::Message FloatParameterController::okButtonText() {
|
||||
return I18n::Message::Ok;
|
||||
}
|
||||
|
||||
View * FloatParameterController::loadView() {
|
||||
SelectableTableView * tableView = new SelectableTableView(this, this, 0, 1, Metric::CommonTopMargin, Metric::CommonRightMargin, Metric::CommonBottomMargin, Metric::CommonLeftMargin, this);
|
||||
m_okButton = new ButtonWithSeparator(tableView, okButtonText(), Invocation([](void * context, void * sender) {
|
||||
FloatParameterController * parameterController = (FloatParameterController *) context;
|
||||
parameterController->buttonAction();
|
||||
}, this));
|
||||
return tableView;
|
||||
}
|
||||
|
||||
void FloatParameterController::unloadView(View * view) {
|
||||
delete m_okButton;
|
||||
m_okButton = nullptr;
|
||||
delete view;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -29,13 +29,13 @@ public:
|
||||
bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override;
|
||||
bool textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) override;
|
||||
void tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY) override;
|
||||
void unloadView() override;
|
||||
protected:
|
||||
int activeCell();
|
||||
StackViewController * stackController();
|
||||
virtual float parameterAtIndex(int index) = 0;
|
||||
virtual SelectableTableView * selectableTableView();
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
private:
|
||||
constexpr static int k_buttonMargin = 6;
|
||||
virtual void buttonAction();
|
||||
|
||||
@@ -16,13 +16,6 @@ int GoToParameterController::numberOfRows() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
void GoToParameterController::unloadView() {
|
||||
assert(m_abscisseCell != nullptr);
|
||||
delete m_abscisseCell;
|
||||
m_abscisseCell = nullptr;
|
||||
FloatParameterController::unloadView();
|
||||
}
|
||||
|
||||
HighlightCell * GoToParameterController::reusableParameterCell(int index, int type) {
|
||||
assert(index == 0);
|
||||
return m_abscisseCell;
|
||||
@@ -40,11 +33,16 @@ void GoToParameterController::buttonAction() {
|
||||
stack->pop();
|
||||
}
|
||||
|
||||
View * GoToParameterController::createView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::createView();
|
||||
assert(m_abscisseCell == nullptr);
|
||||
View * GoToParameterController::loadView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::loadView();
|
||||
m_abscisseCell = new MessageTableCellWithEditableText(tableView, this, m_draftTextBuffer, m_abscissaSymbol);
|
||||
return tableView;
|
||||
}
|
||||
|
||||
void GoToParameterController::unloadView(View * view) {
|
||||
delete m_abscisseCell;
|
||||
m_abscisseCell = nullptr;
|
||||
FloatParameterController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@ class GoToParameterController : public FloatParameterController {
|
||||
public:
|
||||
GoToParameterController(Responder * parentResponder, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol);
|
||||
int numberOfRows() override;
|
||||
void unloadView() override;
|
||||
protected:
|
||||
constexpr static float k_maxDisplayableFloat = 1E8f;
|
||||
CurveViewCursor * m_cursor;
|
||||
@@ -20,7 +19,8 @@ private:
|
||||
void buttonAction() override;
|
||||
HighlightCell * reusableParameterCell(int index, int type) override;
|
||||
int reusableParameterCellCount(int type) override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
MessageTableCellWithEditableText * m_abscisseCell;
|
||||
InteractiveCurveViewRange * m_graphRange;
|
||||
|
||||
@@ -31,15 +31,6 @@ Interval * IntervalParameterController::interval() {
|
||||
return m_interval;
|
||||
}
|
||||
|
||||
void IntervalParameterController::unloadView() {
|
||||
for (int i = 0; i < k_totalNumberOfCell; i++) {
|
||||
assert(m_intervalCells[i] != nullptr);
|
||||
delete m_intervalCells[i];
|
||||
m_intervalCells[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView();
|
||||
}
|
||||
|
||||
float IntervalParameterController::parameterAtIndex(int index) {
|
||||
GetterPointer getters[k_totalNumberOfCell] = {&Interval::start, &Interval::end, &Interval::step};
|
||||
return (m_interval->*getters[index])();
|
||||
@@ -75,13 +66,20 @@ int IntervalParameterController::reusableParameterCellCount(int type) {
|
||||
return k_totalNumberOfCell;
|
||||
}
|
||||
|
||||
View * IntervalParameterController::createView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::createView();
|
||||
View * IntervalParameterController::loadView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::loadView();
|
||||
for (int i = 0; i < k_totalNumberOfCell; i++) {
|
||||
assert(m_intervalCells[i] == nullptr);
|
||||
m_intervalCells[i] = new MessageTableCellWithEditableText(tableView, this, m_draftTextBuffer, I18n::Message::Default);
|
||||
}
|
||||
return tableView;
|
||||
}
|
||||
|
||||
void IntervalParameterController::unloadView(View * view) {
|
||||
for (int i = 0; i < k_totalNumberOfCell; i++) {
|
||||
delete m_intervalCells[i];
|
||||
m_intervalCells[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -14,7 +14,6 @@ public:
|
||||
const char * title() override;
|
||||
void willDisplayCellForIndex(HighlightCell * cell, int index) override;
|
||||
int numberOfRows() override;
|
||||
void unloadView() override;
|
||||
protected:
|
||||
constexpr static int k_totalNumberOfCell = 3;
|
||||
bool setParameterAtIndex(int parameterIndex, float f) override;
|
||||
@@ -23,7 +22,8 @@ private:
|
||||
HighlightCell * reusableParameterCell(int index, int type) override;
|
||||
int reusableParameterCellCount(int type) override;
|
||||
float parameterAtIndex(int index) override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
MessageTableCellWithEditableText * m_intervalCells[k_totalNumberOfCell];
|
||||
};
|
||||
|
||||
@@ -235,7 +235,7 @@ bool ListController::handleEvent(Ion::Events::Event event) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void ListController::viewWillAppear() {
|
||||
void ListController::didEnterResponderChain(Responder * previousFirstResponder) {
|
||||
selectableTableView()->reloadData();
|
||||
}
|
||||
|
||||
@@ -246,16 +246,6 @@ void ListController::willExitResponderChain(Responder * nextFirstResponder) {
|
||||
}
|
||||
}
|
||||
|
||||
void ListController::unloadView() {
|
||||
assert(m_emptyCell != nullptr);
|
||||
delete m_emptyCell;
|
||||
m_emptyCell = nullptr;
|
||||
assert(m_addNewFunction != nullptr);
|
||||
delete m_addNewFunction;
|
||||
m_addNewFunction = nullptr;
|
||||
DynamicViewController::unloadView();
|
||||
}
|
||||
|
||||
StackViewController * ListController::stackController() const{
|
||||
return (StackViewController *)(parentResponder()->parentResponder()->parentResponder());
|
||||
}
|
||||
@@ -275,14 +265,6 @@ SelectableTableView * ListController::selectableTableView() {
|
||||
return (SelectableTableView *)view();
|
||||
}
|
||||
|
||||
View * ListController::createView() {
|
||||
assert(m_emptyCell == nullptr);
|
||||
m_emptyCell = new EvenOddCell();
|
||||
assert(m_addNewFunction == nullptr);
|
||||
m_addNewFunction = new NewFunctionCell(m_addNewMessage);
|
||||
return new SelectableTableView(this, this, 0, 0, 0, 0, 0, 0, this, false, true);
|
||||
}
|
||||
|
||||
TabViewController * ListController::tabController() const{
|
||||
return (TabViewController *)(parentResponder()->parentResponder()->parentResponder()->parentResponder());
|
||||
}
|
||||
@@ -305,4 +287,18 @@ void ListController::removeFunctionRow(Function * function) {
|
||||
m_functionStore->removeFunction(function);
|
||||
}
|
||||
|
||||
View * ListController::loadView() {
|
||||
m_emptyCell = new EvenOddCell();
|
||||
m_addNewFunction = new NewFunctionCell(m_addNewMessage);
|
||||
return new SelectableTableView(this, this, 0, 0, 0, 0, 0, 0, this, false, true);
|
||||
}
|
||||
|
||||
void ListController::unloadView(View * view) {
|
||||
delete m_emptyCell;
|
||||
m_emptyCell = nullptr;
|
||||
delete m_addNewFunction;
|
||||
m_addNewFunction = nullptr;
|
||||
delete view;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -26,16 +26,16 @@ public:
|
||||
Button * buttonAtIndex(int index, ButtonRowController::Position position) const override;
|
||||
void didBecomeFirstResponder() override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void viewWillAppear() override;
|
||||
void didEnterResponderChain(Responder * previousFirstResponder) override;
|
||||
void willExitResponderChain(Responder * nextFirstResponder) override;
|
||||
void unloadView() override;
|
||||
protected:
|
||||
static constexpr KDCoordinate k_emptyRowHeight = 50;
|
||||
StackViewController * stackController() const;
|
||||
void configureFunction(Function * function);
|
||||
virtual void reinitExpression(Function * function);
|
||||
SelectableTableView * selectableTableView();
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
FunctionStore * m_functionStore;
|
||||
private:
|
||||
static constexpr KDCoordinate k_functionNameWidth = 65;
|
||||
|
||||
@@ -121,28 +121,24 @@ int RangeParameterController::reusableParameterCellCount(int type) {
|
||||
return k_numberOfTextCell;
|
||||
}
|
||||
|
||||
void RangeParameterController::unloadView() {
|
||||
assert(m_yAutoCell != nullptr);
|
||||
delete m_yAutoCell;
|
||||
m_yAutoCell = nullptr;
|
||||
for (int i = 0; i < k_numberOfTextCell; i++) {
|
||||
assert(m_rangeCells[i] != nullptr);
|
||||
delete m_rangeCells[i];
|
||||
m_rangeCells[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView();
|
||||
}
|
||||
|
||||
View * RangeParameterController::createView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::createView();
|
||||
assert(m_yAutoCell == nullptr);
|
||||
View * RangeParameterController::loadView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::loadView();
|
||||
m_yAutoCell = new MessageTableCellWithSwitch(I18n::Message::YAuto);
|
||||
for (int i = 0; i < k_numberOfTextCell; i++) {
|
||||
assert(m_rangeCells[i] == nullptr);
|
||||
m_rangeCells[i] = new MessageTableCellWithEditableText(tableView, this, m_draftTextBuffer, I18n::Message::Default);
|
||||
}
|
||||
return tableView;
|
||||
}
|
||||
|
||||
void RangeParameterController::unloadView(View * view) {
|
||||
delete m_yAutoCell;
|
||||
m_yAutoCell = nullptr;
|
||||
for (int i = 0; i < k_numberOfTextCell; i++) {
|
||||
delete m_rangeCells[i];
|
||||
m_rangeCells[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -17,13 +17,13 @@ public:
|
||||
bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override;
|
||||
void tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY) override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
HighlightCell * reusableParameterCell(int index, int type) override;
|
||||
int reusableParameterCellCount(int type) override;
|
||||
float parameterAtIndex(int index) override;
|
||||
bool setParameterAtIndex(int parameterIndex, float f) override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
constexpr static int k_numberOfTextCell = 4;
|
||||
InteractiveCurveViewRange * m_interactiveRange;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
|
||||
@@ -96,15 +96,6 @@ bool StoreController::handleEvent(Ion::Events::Event event) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void StoreController::unloadView() {
|
||||
for (int i = 0; i < k_maxNumberOfEditableCells; i++) {
|
||||
assert(m_editableCells[i] != nullptr);
|
||||
delete m_editableCells[i];
|
||||
m_editableCells[i] = nullptr;
|
||||
}
|
||||
EditableCellTableViewController::unloadView();
|
||||
}
|
||||
|
||||
Responder * StoreController::tabController() const {
|
||||
return (parentResponder()->parentResponder()->parentResponder());
|
||||
}
|
||||
@@ -133,13 +124,20 @@ int StoreController::maxNumberOfElements() const {
|
||||
return FloatPairStore::k_maxNumberOfPairs;
|
||||
}
|
||||
|
||||
View * StoreController::createView() {
|
||||
SelectableTableView * tableView = (SelectableTableView*)EditableCellTableViewController::createView();
|
||||
View * StoreController::loadView() {
|
||||
SelectableTableView * tableView = (SelectableTableView*)EditableCellTableViewController::loadView();
|
||||
for (int i = 0; i < k_maxNumberOfEditableCells; i++) {
|
||||
assert(m_editableCells[i] == nullptr);
|
||||
m_editableCells[i] = new EvenOddEditableTextCell(tableView, this, m_draftTextBuffer);
|
||||
}
|
||||
return tableView;
|
||||
}
|
||||
|
||||
void StoreController::unloadView(View * view) {
|
||||
for (int i = 0; i < k_maxNumberOfEditableCells; i++) {
|
||||
delete m_editableCells[i];
|
||||
m_editableCells[i] = nullptr;
|
||||
}
|
||||
EditableCellTableViewController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,13 +22,13 @@ public:
|
||||
void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void didBecomeFirstResponder() override;
|
||||
void unloadView() override;
|
||||
protected:
|
||||
static constexpr KDCoordinate k_cellWidth = Ion::Display::Width/2 - Metric::CommonRightMargin/2 - Metric::CommonLeftMargin/2;
|
||||
constexpr static int k_maxNumberOfEditableCells = 22;
|
||||
constexpr static int k_numberOfTitleCells = 2;
|
||||
Responder * tabController() const override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
bool cellAtLocationIsEditable(int columnIndex, int rowIndex) override;
|
||||
bool setDataAtLocation(float floatBody, int columnIndex, int rowIndex) override;
|
||||
float dataAtLocation(int columnIndex, int rowIndex) override;
|
||||
|
||||
@@ -19,6 +19,7 @@ void TabTableController::didBecomeFirstResponder() {
|
||||
}
|
||||
|
||||
void TabTableController::viewWillAppear() {
|
||||
DynamicViewController::viewWillAppear();
|
||||
selectableTableView()->reloadData();
|
||||
}
|
||||
|
||||
@@ -33,10 +34,13 @@ SelectableTableView * TabTableController::selectableTableView() {
|
||||
return (SelectableTableView *)view();
|
||||
}
|
||||
|
||||
View * TabTableController::createView() {
|
||||
View * TabTableController::loadView() {
|
||||
return new SelectableTableView(this, m_dataSource, 0, 0, m_topMargin, m_rightMargin, m_bottomMargin, m_leftMargin, this, m_showIndicators, true, Palette::WallScreenDark);
|
||||
}
|
||||
|
||||
void TabTableController::unloadView(View * view) {
|
||||
delete view;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,8 @@ public:
|
||||
void willExitResponderChain(Responder * nextFirstResponder) override;
|
||||
protected:
|
||||
SelectableTableView * selectableTableView();
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
virtual Responder * tabController() const = 0;
|
||||
private:
|
||||
TableViewDataSource * m_dataSource;
|
||||
|
||||
@@ -227,20 +227,8 @@ Responder * ValuesController::defaultController() {
|
||||
}
|
||||
|
||||
void ValuesController::viewWillAppear() {
|
||||
header()->setSelectedButton(-1);
|
||||
EditableCellTableViewController::viewWillAppear();
|
||||
}
|
||||
|
||||
void ValuesController::unloadView() {
|
||||
assert(m_abscissaTitleCell != nullptr);
|
||||
delete m_abscissaTitleCell;
|
||||
m_abscissaTitleCell = nullptr;
|
||||
for (int i = 0; i < k_maxNumberOfAbscissaCells; i++) {
|
||||
assert(m_abscissaCells[i] != nullptr);
|
||||
delete m_abscissaCells[i];
|
||||
m_abscissaCells[i] = nullptr;
|
||||
}
|
||||
EditableCellTableViewController::unloadView();
|
||||
header()->setSelectedButton(-1);
|
||||
}
|
||||
|
||||
Function * ValuesController::functionAtColumn(int i) {
|
||||
@@ -305,16 +293,24 @@ float ValuesController::evaluationOfAbscissaAtColumn(float abscissa, int columnI
|
||||
return function->evaluateAtAbscissa(abscissa, myApp->localContext());
|
||||
}
|
||||
|
||||
View * ValuesController::createView() {
|
||||
SelectableTableView * tableView = (SelectableTableView*)EditableCellTableViewController::createView();
|
||||
assert(m_abscissaTitleCell == nullptr);
|
||||
View * ValuesController::loadView() {
|
||||
SelectableTableView * tableView = (SelectableTableView*)EditableCellTableViewController::loadView();
|
||||
m_abscissaTitleCell = new EvenOddMessageTextCell(KDText::FontSize::Small);
|
||||
for (int i = 0; i < k_maxNumberOfAbscissaCells; i++) {
|
||||
assert(m_abscissaCells[i] == nullptr);
|
||||
m_abscissaCells[i] = new EvenOddEditableTextCell(tableView, this, m_draftTextBuffer, KDText::FontSize::Small);
|
||||
}
|
||||
return tableView;
|
||||
}
|
||||
|
||||
void ValuesController::unloadView(View * view) {
|
||||
delete m_abscissaTitleCell;
|
||||
m_abscissaTitleCell = nullptr;
|
||||
for (int i = 0; i < k_maxNumberOfAbscissaCells; i++) {
|
||||
delete m_abscissaCells[i];
|
||||
m_abscissaCells[i] = nullptr;
|
||||
}
|
||||
EditableCellTableViewController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,6 @@ public:
|
||||
bool isEmpty() const override;
|
||||
Responder * defaultController() override;
|
||||
void viewWillAppear() override;
|
||||
void unloadView() override;
|
||||
static constexpr KDCoordinate k_topMargin = 10;
|
||||
static constexpr KDCoordinate k_bottomMargin = 5;
|
||||
static constexpr KDCoordinate k_leftMargin = 1;
|
||||
@@ -44,7 +43,8 @@ public:
|
||||
protected:
|
||||
StackViewController * stackController() const;
|
||||
bool setDataAtLocation(float floatBody, int columnIndex, int rowIndex) override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
Interval m_interval;
|
||||
private:
|
||||
virtual Function * functionAtColumn(int i);
|
||||
|
||||
@@ -111,32 +111,29 @@ int CalculationController::typeAtLocation(int i, int j) {
|
||||
return i;
|
||||
}
|
||||
|
||||
void CalculationController::unloadView() {
|
||||
for (int i = 0; i < k_maxNumberOfDisplayableRows; i++) {
|
||||
assert(m_titleCells[i] != nullptr);
|
||||
delete m_titleCells[i];
|
||||
m_titleCells[i] = nullptr;
|
||||
assert(m_calculationCells[i] != nullptr);
|
||||
delete m_calculationCells[i];
|
||||
m_calculationCells[i] = nullptr;
|
||||
}
|
||||
TabTableController::unloadView();
|
||||
}
|
||||
|
||||
Responder * CalculationController::tabController() const {
|
||||
return (parentResponder()->parentResponder()->parentResponder());
|
||||
}
|
||||
|
||||
View * CalculationController::createView() {
|
||||
View * CalculationController::loadView() {
|
||||
for (int i = 0; i < k_maxNumberOfDisplayableRows; i++) {
|
||||
assert(m_titleCells[i] == nullptr);
|
||||
m_titleCells[i] = new EvenOddMessageTextCell(KDText::FontSize::Small);
|
||||
m_titleCells[i]->setAlignment(1.0f, 0.5f);
|
||||
assert(m_calculationCells[i] == nullptr);
|
||||
m_calculationCells[i] = new EvenOddBufferTextCell(KDText::FontSize::Small);
|
||||
m_calculationCells[i]->setTextColor(Palette::GreyDark);
|
||||
}
|
||||
return TabTableController::createView();
|
||||
return TabTableController::loadView();
|
||||
}
|
||||
|
||||
|
||||
void CalculationController::unloadView(View * view) {
|
||||
for (int i = 0; i < k_maxNumberOfDisplayableRows; i++) {
|
||||
delete m_titleCells[i];
|
||||
m_titleCells[i] = nullptr;
|
||||
delete m_calculationCells[i];
|
||||
m_calculationCells[i] = nullptr;
|
||||
}
|
||||
TabTableController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -29,10 +29,10 @@ public:
|
||||
HighlightCell * reusableCell(int index, int type) override;
|
||||
int reusableCellCount(int type) override;
|
||||
int typeAtLocation(int i, int j) override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
Responder * tabController() const override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
constexpr static int k_totalNumberOfRows = 13;
|
||||
constexpr static int k_maxNumberOfDisplayableRows = 11;
|
||||
static constexpr KDCoordinate k_cellHeight = 20;
|
||||
|
||||
@@ -30,15 +30,6 @@ void HistogramParameterController::willDisplayCellForIndex(HighlightCell * cell,
|
||||
FloatParameterController::willDisplayCellForIndex(cell, index);
|
||||
}
|
||||
|
||||
void HistogramParameterController::unloadView() {
|
||||
for (int i = 0; i < k_numberOfCells; i++) {
|
||||
assert(m_cells[i] != nullptr);
|
||||
delete m_cells[i];
|
||||
m_cells[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView();
|
||||
}
|
||||
|
||||
float HistogramParameterController::parameterAtIndex(int index) {
|
||||
assert(index >= 0 && index < k_numberOfCells);
|
||||
if (index == 0) {
|
||||
@@ -76,14 +67,21 @@ int HistogramParameterController::reusableParameterCellCount(int type) {
|
||||
return k_numberOfCells;
|
||||
}
|
||||
|
||||
View * HistogramParameterController::createView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::createView();
|
||||
View * HistogramParameterController::loadView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::loadView();
|
||||
for (int i = 0; i < k_numberOfCells; i++) {
|
||||
assert(m_cells[i] == nullptr);
|
||||
m_cells[i] = new MessageTableCellWithEditableText(tableView, this, m_draftTextBuffer, I18n::Message::Default);
|
||||
}
|
||||
return tableView;
|
||||
}
|
||||
|
||||
void HistogramParameterController::unloadView(View * view) {
|
||||
for (int i = 0; i < k_numberOfCells; i++) {
|
||||
delete m_cells[i];
|
||||
m_cells[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -13,13 +13,13 @@ public:
|
||||
const char * title() override;
|
||||
int numberOfRows() override;
|
||||
void willDisplayCellForIndex(HighlightCell * cell, int index) override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
HighlightCell * reusableParameterCell(int index, int type) override;
|
||||
int reusableParameterCellCount(int type) override;
|
||||
float parameterAtIndex(int index) override;
|
||||
bool setParameterAtIndex(int parameterIndex, float f) override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
constexpr static int k_numberOfCells = 2;
|
||||
MessageTableCellWithEditableText * m_cells[k_numberOfCells];
|
||||
|
||||
@@ -26,15 +26,6 @@ void StoreController::willDisplayCellAtLocation(HighlightCell * cell, int i, int
|
||||
mytitleCell->setMessage(I18n::Message::Sizes);
|
||||
}
|
||||
|
||||
void StoreController::unloadView() {
|
||||
for (int i = 0; i < k_numberOfTitleCells; i++) {
|
||||
assert(m_titleCells[i] != nullptr);
|
||||
delete m_titleCells[i];
|
||||
m_titleCells[i] = nullptr;
|
||||
}
|
||||
Shared::StoreController::unloadView();
|
||||
}
|
||||
|
||||
HighlightCell * StoreController::titleCells(int index) {
|
||||
assert(index >= 0 && index < k_numberOfTitleCells);
|
||||
return m_titleCells[index];
|
||||
@@ -51,12 +42,19 @@ bool StoreController::setDataAtLocation(float floatBody, int columnIndex, int ro
|
||||
return Shared::StoreController::setDataAtLocation(floatBody, columnIndex, rowIndex);
|
||||
}
|
||||
|
||||
View * StoreController::createView() {
|
||||
View * StoreController::loadView() {
|
||||
for (int i = 0; i < k_numberOfTitleCells; i++) {
|
||||
assert(m_titleCells[i] == nullptr);
|
||||
m_titleCells[i] = new EvenOddMessageTextCell(KDText::FontSize::Small);
|
||||
}
|
||||
return Shared::StoreController::createView();
|
||||
return Shared::StoreController::loadView();
|
||||
}
|
||||
|
||||
void StoreController::unloadView(View * view) {
|
||||
for (int i = 0; i < k_numberOfTitleCells; i++) {
|
||||
delete m_titleCells[i];
|
||||
m_titleCells[i] = nullptr;
|
||||
}
|
||||
Shared::StoreController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,11 +11,11 @@ class StoreController : public Shared::StoreController {
|
||||
public:
|
||||
StoreController(Responder * parentResponder, Store * store, ButtonRowController * header);
|
||||
void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
bool setDataAtLocation(float floatBody, int columnIndex, int rowIndex) override;
|
||||
HighlightCell * titleCells(int index) override;
|
||||
View * createView() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
EvenOddMessageTextCell * m_titleCells[k_numberOfTitleCells];
|
||||
};
|
||||
|
||||
|
||||
@@ -264,5 +264,6 @@ void VariableBoxController::viewWillAppear() {
|
||||
}
|
||||
|
||||
void VariableBoxController::viewDidDisappear() {
|
||||
StackViewController::viewDidDisappear();
|
||||
m_contentViewController.deselectTable();
|
||||
}
|
||||
|
||||
@@ -15,8 +15,6 @@ public:
|
||||
void didBecomeFirstResponder() override;
|
||||
void viewWillAppear() override;
|
||||
void viewDidDisappear() override;
|
||||
void loadView() override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
class ContentView : public View {
|
||||
public:
|
||||
|
||||
@@ -28,8 +28,6 @@ public:
|
||||
bool setSelectedButton(int selectedButton);
|
||||
void viewWillAppear() override;
|
||||
void viewDidDisappear() override;
|
||||
void loadView() override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
class ContentView : public View {
|
||||
public:
|
||||
@@ -66,10 +64,6 @@ public:
|
||||
virtual Button * buttonAtIndex(int index, ButtonRowController::Position position) const;
|
||||
ButtonRowController * header();
|
||||
ButtonRowController * footer();
|
||||
/* By default these two functions do not load anything. They should be
|
||||
* overrided if the delegate dynamically allocate the button views. */
|
||||
virtual void loadButtonView();
|
||||
virtual void unloadButtonView();
|
||||
private:
|
||||
ButtonRowController * m_header;
|
||||
ButtonRowController * m_footer;
|
||||
|
||||
@@ -15,10 +15,13 @@ public:
|
||||
DynamicViewController(Responder * parentResponder);
|
||||
~DynamicViewController();
|
||||
View * view() override;
|
||||
virtual void loadView() override;
|
||||
virtual void unloadView() override;
|
||||
void viewWillAppear() override;
|
||||
void viewDidDisappear() override;
|
||||
private:
|
||||
virtual View * createView() = 0;
|
||||
void loadViewIfNeeded();
|
||||
void unloadViewIfNeeded();
|
||||
virtual View * loadView() = 0;
|
||||
virtual void unloadView(View * view) = 0;
|
||||
View * m_view;
|
||||
};
|
||||
|
||||
|
||||
@@ -17,8 +17,6 @@ public:
|
||||
bool isDisplayingModal();
|
||||
void viewWillAppear() override;
|
||||
void viewDidDisappear() override;
|
||||
void loadView() override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
class ContentView : public View {
|
||||
public:
|
||||
|
||||
@@ -23,8 +23,6 @@ public:
|
||||
void didBecomeFirstResponder() override;
|
||||
void viewWillAppear() override;
|
||||
void viewDidDisappear() override;
|
||||
void loadView() override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
class Frame {
|
||||
public:
|
||||
|
||||
@@ -20,8 +20,6 @@ public:
|
||||
void willResignFirstResponder() override;
|
||||
void viewWillAppear() override;
|
||||
void viewDidDisappear() override;
|
||||
void loadView() override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
ViewController * activeViewController();
|
||||
class ContentView : public View {
|
||||
|
||||
@@ -32,8 +32,6 @@ public:
|
||||
ViewController(Responder * parentResponder);
|
||||
virtual const char * title();
|
||||
virtual View * view() = 0;
|
||||
virtual void loadView();
|
||||
virtual void unloadView();
|
||||
virtual void viewWillAppear();
|
||||
virtual void viewDidDisappear();
|
||||
};
|
||||
|
||||
@@ -86,15 +86,3 @@ void AlternateEmptyViewController::viewDidDisappear() {
|
||||
m_contentView.mainViewController()->viewDidDisappear();
|
||||
}
|
||||
}
|
||||
|
||||
void AlternateEmptyViewController::loadView() {
|
||||
if (!m_contentView.alternateEmptyViewDelegate()->isEmpty()) {
|
||||
m_contentView.mainViewController()->loadView();
|
||||
}
|
||||
}
|
||||
|
||||
void AlternateEmptyViewController::unloadView() {
|
||||
if (!m_contentView.alternateEmptyViewDelegate()->isEmpty()) {
|
||||
m_contentView.mainViewController()->unloadView();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,11 +91,10 @@ const Container * App::container() const {
|
||||
}
|
||||
|
||||
void App::didBecomeActive(Window * window) {
|
||||
m_modalViewController.loadView();
|
||||
View * view = m_modalViewController.view();
|
||||
assert(m_modalViewController.app() == this);
|
||||
window->setContentView(view);
|
||||
m_modalViewController.viewWillAppear();
|
||||
window->setContentView(view);
|
||||
setFirstResponder(&m_modalViewController);
|
||||
window->redraw();
|
||||
}
|
||||
@@ -106,5 +105,4 @@ void App::willBecomeInactive() {
|
||||
}
|
||||
setFirstResponder(nullptr);
|
||||
m_modalViewController.viewDidDisappear();
|
||||
m_modalViewController.unloadView();
|
||||
}
|
||||
|
||||
@@ -26,12 +26,6 @@ ButtonRowController * ButtonRowDelegate::header() {
|
||||
return m_header;
|
||||
}
|
||||
|
||||
void ButtonRowDelegate::loadButtonView() {
|
||||
}
|
||||
|
||||
void ButtonRowDelegate::unloadButtonView() {
|
||||
}
|
||||
|
||||
ButtonRowController::ContentView::ContentView(ViewController * mainViewController, ButtonRowDelegate * delegate, Position position, Style style) :
|
||||
View(),
|
||||
m_mainViewController(mainViewController),
|
||||
@@ -230,21 +224,10 @@ bool ButtonRowController::handleEvent(Ion::Events::Event event) {
|
||||
void ButtonRowController::viewWillAppear() {
|
||||
/* We need to layout subviews at first appearance because the number of
|
||||
* buttons might have changed between 2 appearences. */
|
||||
m_contentView.mainViewController()->viewWillAppear();
|
||||
m_contentView.layoutSubviews();
|
||||
m_contentView.mainViewController()->viewWillAppear();
|
||||
}
|
||||
|
||||
void ButtonRowController::viewDidDisappear() {
|
||||
m_contentView.mainViewController()->viewDidDisappear();
|
||||
}
|
||||
|
||||
void ButtonRowController::loadView() {
|
||||
m_contentView.buttonRowDelegate()->loadButtonView();
|
||||
m_contentView.mainViewController()->loadView();
|
||||
m_contentView.layoutSubviews();
|
||||
}
|
||||
|
||||
void ButtonRowController::unloadView() {
|
||||
m_contentView.buttonRowDelegate()->unloadButtonView();
|
||||
m_contentView.mainViewController()->unloadView();
|
||||
}
|
||||
}
|
||||
@@ -9,24 +9,32 @@ DynamicViewController::DynamicViewController(Responder * parentResponder) :
|
||||
}
|
||||
|
||||
DynamicViewController::~DynamicViewController() {
|
||||
if (m_view) {
|
||||
delete m_view;
|
||||
m_view = nullptr;
|
||||
}
|
||||
assert(m_view == nullptr);
|
||||
}
|
||||
|
||||
View * DynamicViewController::view() {
|
||||
assert(m_view != nullptr);
|
||||
loadViewIfNeeded();
|
||||
return m_view;
|
||||
}
|
||||
|
||||
void DynamicViewController::loadView() {
|
||||
assert(m_view == nullptr);
|
||||
m_view = createView();
|
||||
void DynamicViewController::viewWillAppear() {
|
||||
loadViewIfNeeded();
|
||||
}
|
||||
|
||||
void DynamicViewController::unloadView() {
|
||||
assert(m_view != nullptr);
|
||||
delete m_view;
|
||||
m_view = nullptr;
|
||||
void DynamicViewController::viewDidDisappear() {
|
||||
unloadViewIfNeeded();
|
||||
}
|
||||
|
||||
void DynamicViewController::loadViewIfNeeded() {
|
||||
if (m_view == nullptr) {
|
||||
m_view = loadView();
|
||||
assert(m_view != nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
void DynamicViewController::unloadViewIfNeeded() {
|
||||
if (m_view != nullptr) {
|
||||
unloadView(m_view);
|
||||
m_view = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,8 +57,10 @@ KDRect ModalViewController::ContentView::frame() {
|
||||
}
|
||||
|
||||
void ModalViewController::ContentView::layoutSubviews() {
|
||||
assert(m_regularView != nullptr);
|
||||
m_regularView->setFrame(bounds());
|
||||
if (numberOfSubviews() == 2) {
|
||||
assert(m_currentModalView != nullptr);
|
||||
m_currentModalView->setFrame(frame());
|
||||
}
|
||||
}
|
||||
@@ -110,8 +112,6 @@ void ModalViewController::displayModalViewController(ViewController * vc, float
|
||||
m_currentModalViewController = vc;
|
||||
vc->setParentResponder(this);
|
||||
m_previousResponder = app()->firstResponder();
|
||||
m_regularViewController->viewDidDisappear();
|
||||
vc->loadView();
|
||||
m_contentView.presentModalView(vc->view(), verticalAlignment, horizontalAlignment, topMargin, leftMargin, bottomMargin, rightMargin);
|
||||
m_currentModalViewController->viewWillAppear();
|
||||
app()->setFirstResponder(vc);
|
||||
@@ -119,10 +119,8 @@ void ModalViewController::displayModalViewController(ViewController * vc, float
|
||||
|
||||
void ModalViewController::dismissModalViewController() {
|
||||
m_currentModalViewController->viewDidDisappear();
|
||||
m_regularViewController->viewWillAppear();
|
||||
app()->setFirstResponder(m_previousResponder);
|
||||
m_contentView.dismissModalView();
|
||||
m_currentModalViewController->unloadView();
|
||||
m_currentModalViewController = nullptr;
|
||||
}
|
||||
|
||||
@@ -145,6 +143,8 @@ bool ModalViewController::handleEvent(Ion::Events::Event event) {
|
||||
}
|
||||
|
||||
void ModalViewController::viewWillAppear() {
|
||||
m_contentView.setMainView(m_regularViewController->view());
|
||||
m_contentView.layoutSubviews();
|
||||
if (m_contentView.isDisplayingModal()) {
|
||||
m_currentModalViewController->viewWillAppear();
|
||||
}
|
||||
@@ -157,19 +157,3 @@ void ModalViewController::viewDidDisappear() {
|
||||
}
|
||||
m_regularViewController->viewDidDisappear();
|
||||
}
|
||||
|
||||
void ModalViewController::loadView() {
|
||||
if (m_contentView.isDisplayingModal()) {
|
||||
m_currentModalViewController->loadView();
|
||||
}
|
||||
m_regularViewController->loadView();
|
||||
m_contentView.setMainView(m_regularViewController->view());
|
||||
m_contentView.layoutSubviews();
|
||||
}
|
||||
|
||||
void ModalViewController::unloadView() {
|
||||
if (m_contentView.isDisplayingModal()) {
|
||||
m_currentModalViewController->unloadView();
|
||||
}
|
||||
m_regularViewController->unloadView();
|
||||
}
|
||||
|
||||
@@ -89,7 +89,6 @@ void StackViewController::push(ViewController * vc, KDColor textColor, KDColor b
|
||||
setupActiveViewController();
|
||||
if (m_numberOfChildren > 1) {
|
||||
m_childrenFrame[m_numberOfChildren-2].viewController()->viewDidDisappear();
|
||||
m_childrenFrame[m_numberOfChildren-2].viewController()->unloadView();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,10 +97,9 @@ void StackViewController::pop() {
|
||||
assert(m_numberOfChildren > 0);
|
||||
ViewController * vc = m_childrenFrame[m_numberOfChildren-1].viewController();
|
||||
m_numberOfChildren--;
|
||||
vc->viewDidDisappear();
|
||||
setupActiveViewController();
|
||||
vc->setParentResponder(nullptr);
|
||||
vc->unloadView();
|
||||
vc->viewDidDisappear();
|
||||
}
|
||||
|
||||
void StackViewController::pushModel(Frame frame) {
|
||||
@@ -111,7 +109,6 @@ void StackViewController::pushModel(Frame frame) {
|
||||
void StackViewController::setupActiveViewController() {
|
||||
ViewController * vc = m_childrenFrame[m_numberOfChildren-1].viewController();
|
||||
vc->setParentResponder(this);
|
||||
vc->loadView();
|
||||
m_view.setContentView(vc->view());
|
||||
vc->viewWillAppear();
|
||||
vc->setParentResponder(this);
|
||||
@@ -136,8 +133,14 @@ View * StackViewController::view() {
|
||||
}
|
||||
|
||||
void StackViewController::viewWillAppear() {
|
||||
/* Load the stack view */
|
||||
for (int i = 0; i < m_numberOfChildren; i++) {
|
||||
m_view.pushStack(m_childrenFrame[i]);
|
||||
}
|
||||
/* Load the visible controller view */
|
||||
ViewController * vc = m_childrenFrame[m_numberOfChildren-1].viewController();
|
||||
if (m_numberOfChildren > 0 && vc) {
|
||||
m_view.setContentView(vc->view());
|
||||
vc->viewWillAppear();
|
||||
}
|
||||
}
|
||||
@@ -147,27 +150,7 @@ void StackViewController::viewDidDisappear() {
|
||||
if (m_numberOfChildren > 0 && vc) {
|
||||
vc->viewDidDisappear();
|
||||
}
|
||||
}
|
||||
|
||||
void StackViewController::loadView() {
|
||||
/* Load the stack view */
|
||||
for (int i = 0; i < m_numberOfChildren; i++) {
|
||||
m_view.pushStack(m_childrenFrame[i]);
|
||||
}
|
||||
/* Load the visible controller view */
|
||||
ViewController * vc = m_childrenFrame[m_numberOfChildren-1].viewController();
|
||||
if (m_numberOfChildren > 0 && vc) {
|
||||
vc->loadView();
|
||||
m_view.setContentView(vc->view());
|
||||
}
|
||||
}
|
||||
|
||||
void StackViewController::unloadView() {
|
||||
for (int i = 0; i < m_numberOfChildren; i++) {
|
||||
m_view.popStack();
|
||||
}
|
||||
ViewController * vc = m_childrenFrame[m_numberOfChildren-1].viewController();
|
||||
if (m_numberOfChildren > 0 && vc) {
|
||||
vc->unloadView();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,19 +114,15 @@ void TabViewController::setActiveTab(int8_t i, bool forceReactive) {
|
||||
ViewController * activeVC = m_children[i];
|
||||
if (i != m_activeChildIndex || forceReactive) {
|
||||
if (i != m_activeChildIndex) {
|
||||
activeVC->loadView();
|
||||
m_view.setActiveView(activeVC->view());
|
||||
}
|
||||
m_view.m_tabView.setActiveIndex(i);
|
||||
if (i >= 0) {
|
||||
m_children[i]->viewWillAppear();
|
||||
}
|
||||
m_view.m_tabView.setActiveIndex(i);
|
||||
}
|
||||
app()->setFirstResponder(activeVC);
|
||||
if (i != m_activeChildIndex || forceReactive) {
|
||||
if (m_activeChildIndex >= 0 && m_activeChildIndex != i) {
|
||||
m_children[m_activeChildIndex]->viewDidDisappear();
|
||||
m_children[m_activeChildIndex]->unloadView();
|
||||
}
|
||||
m_activeChildIndex = i;
|
||||
}
|
||||
@@ -166,15 +162,6 @@ const char * TabViewController::tabName(uint8_t index) {
|
||||
}
|
||||
|
||||
void TabViewController::viewWillAppear() {
|
||||
activeViewController()->viewWillAppear();
|
||||
m_view.m_tabView.setActiveIndex(m_activeChildIndex);
|
||||
}
|
||||
|
||||
void TabViewController::viewDidDisappear() {
|
||||
activeViewController()->viewDidDisappear();
|
||||
}
|
||||
|
||||
void TabViewController::loadView() {
|
||||
if (m_view.m_tabView.numberOfTabs() != m_numberOfChildren) {
|
||||
for (int i=0; i<m_numberOfChildren; i++) {
|
||||
m_view.m_tabView.addTab(m_children[i]);
|
||||
@@ -183,12 +170,13 @@ void TabViewController::loadView() {
|
||||
if (m_activeChildIndex < 0) {
|
||||
m_activeChildIndex = 0;
|
||||
}
|
||||
m_children[m_activeChildIndex]->loadView();
|
||||
m_view.setActiveView(m_children[m_activeChildIndex]->view());
|
||||
activeViewController()->viewWillAppear();
|
||||
m_view.m_tabView.setActiveIndex(m_activeChildIndex);
|
||||
}
|
||||
|
||||
void TabViewController::unloadView() {
|
||||
activeViewController()->unloadView();
|
||||
void TabViewController::viewDidDisappear() {
|
||||
activeViewController()->viewDidDisappear();
|
||||
}
|
||||
|
||||
ViewController * TabViewController::activeViewController() {
|
||||
|
||||
@@ -15,8 +15,3 @@ void ViewController::viewWillAppear() {
|
||||
void ViewController::viewDidDisappear() {
|
||||
}
|
||||
|
||||
void ViewController::loadView() {
|
||||
}
|
||||
|
||||
void ViewController::unloadView() {
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user