mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps] Get rid of DynamicViewController in FloatParameterController
This commit is contained in:
@@ -69,12 +69,18 @@ void ParametersController::ContentView::layoutSubviews() {
|
||||
|
||||
ParametersController::ParametersController(Responder * parentResponder, Law * law, CalculationController * calculationController) :
|
||||
FloatParameterController(parentResponder),
|
||||
m_selectableTableView(nullptr),
|
||||
m_contentView(this, &m_selectableTableView),
|
||||
m_menuListCell{},
|
||||
m_law(law),
|
||||
m_calculationController(calculationController)
|
||||
{
|
||||
assert(m_law != nullptr);
|
||||
m_okButton.setMessage(I18n::Message::Next);
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
m_menuListCell[i].setParentResponder(&m_selectableTableView);
|
||||
m_menuListCell[i].textField()->setDelegate(this);
|
||||
m_menuListCell[i].textField()->setDraftTextBuffer(m_draftTextBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
const char * ParametersController::title() {
|
||||
@@ -99,11 +105,12 @@ void ParametersController::didBecomeFirstResponder() {
|
||||
}
|
||||
|
||||
void ParametersController::viewWillAppear() {
|
||||
FloatParameterController::viewWillAppear();
|
||||
m_contentView.setNumberOfParameters(m_law->numberOfParameter());
|
||||
for (int i = 0; i < m_law->numberOfParameter(); i++) {
|
||||
contentView()->parameterDefinitionAtIndex(i)->setMessage(m_law->parameterDefinitionAtIndex(i));
|
||||
m_contentView.parameterDefinitionAtIndex(i)->setMessage(m_law->parameterDefinitionAtIndex(i));
|
||||
}
|
||||
contentView()->layoutSubviews();
|
||||
m_contentView.layoutSubviews();
|
||||
FloatParameterController::viewWillAppear();
|
||||
}
|
||||
|
||||
int ParametersController::numberOfRows() {
|
||||
@@ -125,7 +132,7 @@ void ParametersController::willDisplayCellForIndex(HighlightCell * cell, int ind
|
||||
HighlightCell * ParametersController::reusableParameterCell(int index, int type) {
|
||||
assert(index >= 0);
|
||||
assert(index < 2);
|
||||
return m_menuListCell[index];
|
||||
return &m_menuListCell[index];
|
||||
}
|
||||
|
||||
int ParametersController::reusableParameterCellCount(int type) {
|
||||
@@ -148,7 +155,7 @@ bool ParametersController::setParameterAtIndex(int parameterIndex, double f) {
|
||||
|
||||
bool ParametersController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) {
|
||||
if (FloatParameterController::textFieldDidFinishEditing(textField, text, event)) {
|
||||
m_selectableTableView->reloadData();
|
||||
m_selectableTableView.reloadData();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -159,37 +166,4 @@ void ParametersController::buttonAction() {
|
||||
stack->push(m_calculationController, KDColorWhite, Palette::SubTab, Palette::SubTab);
|
||||
}
|
||||
|
||||
I18n::Message ParametersController::okButtonText() {
|
||||
return I18n::Message::Next;
|
||||
}
|
||||
|
||||
View * ParametersController::loadView() {
|
||||
m_selectableTableView = (SelectableTableView *)FloatParameterController::loadView();
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
m_menuListCell[i] = new MessageTableCellWithEditableText(m_selectableTableView, this, m_draftTextBuffer);
|
||||
}
|
||||
ContentView * contentView = (ContentView *)new ContentView(this, m_selectableTableView);
|
||||
contentView->setNumberOfParameters(m_law->numberOfParameter());
|
||||
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;
|
||||
}
|
||||
|
||||
ParametersController::ContentView * ParametersController::contentView() {
|
||||
return (ContentView *)view();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ class ParametersController : public Shared::FloatParameterController {
|
||||
public:
|
||||
ParametersController(Responder * parentResponder, Law * m_law, CalculationController * calculationController);
|
||||
const char * title() override;
|
||||
View * view() override { return &m_contentView; }
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void reinitCalculation();
|
||||
void didBecomeFirstResponder() override;
|
||||
@@ -25,9 +26,6 @@ private:
|
||||
double parameterAtIndex(int index) override;
|
||||
bool setParameterAtIndex(int parameterIndex, double f) override;
|
||||
bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override;
|
||||
I18n::Message okButtonText() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
class ContentView : public View {
|
||||
public:
|
||||
ContentView(Responder * parentResponder, SelectableTableView * selectableTableView);
|
||||
@@ -46,12 +44,10 @@ private:
|
||||
MessageTextView m_secondParameterDefinition;
|
||||
SelectableTableView * m_selectableTableView;
|
||||
};
|
||||
SelectableTableView * selectableTableView() override;
|
||||
ContentView * contentView();
|
||||
SelectableTableView * m_selectableTableView;
|
||||
constexpr static int k_maxNumberOfCells = 2;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
MessageTableCellWithEditableText * m_menuListCell[k_maxNumberOfCells];
|
||||
ContentView m_contentView;
|
||||
MessageTableCellWithEditableText m_menuListCell[k_maxNumberOfCells];
|
||||
Law * m_law;
|
||||
CalculationController * m_calculationController;
|
||||
};
|
||||
|
||||
@@ -11,8 +11,12 @@ using namespace Poincare;
|
||||
namespace Shared {
|
||||
|
||||
FloatParameterController::FloatParameterController(Responder * parentResponder) :
|
||||
DynamicViewController(parentResponder),
|
||||
m_okButton(nullptr)
|
||||
ViewController(parentResponder),
|
||||
m_selectableTableView(this, this, this),
|
||||
m_okButton(&m_selectableTableView, I18n::Message::Ok, Invocation([](void * context, void * sender) {
|
||||
FloatParameterController * parameterController = (FloatParameterController *) context;
|
||||
parameterController->buttonAction();
|
||||
}, this))
|
||||
{
|
||||
}
|
||||
|
||||
@@ -24,11 +28,10 @@ void FloatParameterController::didBecomeFirstResponder() {
|
||||
selColumn = selColumn >= numberOfColumns() ? numberOfColumns() - 1 : selColumn;
|
||||
selectCellAtLocation(selColumn, selRow);
|
||||
}
|
||||
app()->setFirstResponder(selectableTableView());
|
||||
app()->setFirstResponder(&m_selectableTableView);
|
||||
}
|
||||
|
||||
void FloatParameterController::viewWillAppear() {
|
||||
DynamicViewController::viewWillAppear();
|
||||
if (selectedRow() == -1 || selectedRow() == numberOfRows()-1) {
|
||||
selectCellAtLocation(0, 0);
|
||||
} else {
|
||||
@@ -38,13 +41,13 @@ void FloatParameterController::viewWillAppear() {
|
||||
selColumn = selColumn >= numberOfColumns() ? numberOfColumns() - 1 : selColumn;
|
||||
selectCellAtLocation(selColumn, selRow);
|
||||
}
|
||||
selectableTableView()->reloadData();
|
||||
m_selectableTableView.reloadData();
|
||||
}
|
||||
|
||||
void FloatParameterController::willExitResponderChain(Responder * nextFirstResponder) {
|
||||
if (parentResponder() == nullptr) {
|
||||
selectableTableView()->deselectTable();
|
||||
selectableTableView()->scrollToCell(0,0);
|
||||
m_selectableTableView.deselectTable();
|
||||
m_selectableTableView.scrollToCell(0,0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +75,7 @@ int FloatParameterController::reusableCellCount(int type) {
|
||||
|
||||
HighlightCell * FloatParameterController::reusableCell(int index, int type) {
|
||||
if (type == 0) {
|
||||
return m_okButton;
|
||||
return &m_okButton;
|
||||
}
|
||||
return reusableParameterCell(index, type);
|
||||
}
|
||||
@@ -128,12 +131,12 @@ bool FloatParameterController::textFieldDidFinishEditing(TextField * textField,
|
||||
if (!setParameterAtIndex(selectedRow(), floatBody)) {
|
||||
return false;
|
||||
}
|
||||
selectableTableView()->reloadCellAtLocation(0, activeCell());
|
||||
selectableTableView()->reloadData();
|
||||
m_selectableTableView.reloadCellAtLocation(0, activeCell());
|
||||
m_selectableTableView.reloadData();
|
||||
if (event == Ion::Events::EXE || event == Ion::Events::OK) {
|
||||
selectableTableView()->selectCellAtLocation(selectedColumn(), selectedRow()+1);
|
||||
m_selectableTableView.selectCellAtLocation(selectedColumn(), selectedRow()+1);
|
||||
} else {
|
||||
selectableTableView()->handleEvent(event);
|
||||
m_selectableTableView.handleEvent(event);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -150,32 +153,9 @@ StackViewController * FloatParameterController::stackController() {
|
||||
return (StackViewController *)parentResponder();
|
||||
}
|
||||
|
||||
SelectableTableView * FloatParameterController::selectableTableView() {
|
||||
return (SelectableTableView *)view();
|
||||
}
|
||||
|
||||
void FloatParameterController::buttonAction() {
|
||||
StackViewController * stack = stackController();
|
||||
stack->pop();
|
||||
}
|
||||
|
||||
I18n::Message FloatParameterController::okButtonText() {
|
||||
return I18n::Message::Ok;
|
||||
}
|
||||
|
||||
View * FloatParameterController::loadView() {
|
||||
SelectableTableView * tableView = new SelectableTableView(this, this, 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -10,9 +10,10 @@ namespace Shared {
|
||||
/* This controller edits float parameter of any model (given through
|
||||
* parameterAtIndex and setParameterAtIndex). */
|
||||
|
||||
class FloatParameterController : public DynamicViewController, public ListViewDataSource, public SelectableTableViewDataSource, public ParameterTextFieldDelegate {
|
||||
class FloatParameterController : public ViewController, public ListViewDataSource, public SelectableTableViewDataSource, public ParameterTextFieldDelegate {
|
||||
public:
|
||||
FloatParameterController(Responder * parentResponder);
|
||||
View * view() override { return &m_selectableTableView; }
|
||||
void didBecomeFirstResponder() override;
|
||||
void viewWillAppear() override;
|
||||
void willExitResponderChain(Responder * nextFirstResponder) override;
|
||||
@@ -31,18 +32,15 @@ protected:
|
||||
int activeCell();
|
||||
StackViewController * stackController();
|
||||
virtual double parameterAtIndex(int index) = 0;
|
||||
virtual SelectableTableView * selectableTableView();
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
SelectableTableView m_selectableTableView;
|
||||
ButtonWithSeparator m_okButton;
|
||||
private:
|
||||
constexpr static int k_buttonMargin = 6;
|
||||
virtual void buttonAction();
|
||||
virtual I18n::Message okButtonText();
|
||||
virtual int reusableParameterCellCount(int type) = 0;
|
||||
virtual HighlightCell * reusableParameterCell(int index, int type) = 0;
|
||||
TextFieldDelegateApp * textFieldDelegateApp() override;
|
||||
virtual bool setParameterAtIndex(int parameterIndex, double f) = 0;
|
||||
ButtonWithSeparator * m_okButton;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -8,8 +8,7 @@ GoToParameterController::GoToParameterController(Responder * parentResponder, In
|
||||
FloatParameterController(parentResponder),
|
||||
m_cursor(cursor),
|
||||
m_graphRange(graphRange),
|
||||
m_abscisseCell(nullptr),
|
||||
m_abscissaSymbol(symbol)
|
||||
m_abscisseCell(&m_selectableTableView, this, m_draftTextBuffer, symbol)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -19,7 +18,7 @@ int GoToParameterController::numberOfRows() {
|
||||
|
||||
HighlightCell * GoToParameterController::reusableParameterCell(int index, int type) {
|
||||
assert(index == 0);
|
||||
return m_abscisseCell;
|
||||
return &m_abscisseCell;
|
||||
}
|
||||
|
||||
int GoToParameterController::reusableParameterCellCount(int type) {
|
||||
@@ -40,16 +39,4 @@ void GoToParameterController::buttonAction() {
|
||||
stack->pop();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -21,11 +21,8 @@ private:
|
||||
void buttonAction() override;
|
||||
HighlightCell * reusableParameterCell(int index, int type) override;
|
||||
int reusableParameterCellCount(int type) override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
MessageTableCellWithEditableText * m_abscisseCell;
|
||||
I18n::Message m_abscissaSymbol;
|
||||
MessageTableCellWithEditableText m_abscisseCell;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -8,6 +8,11 @@ IntervalParameterController::IntervalParameterController(Responder * parentRespo
|
||||
m_interval(interval),
|
||||
m_intervalCells{}
|
||||
{
|
||||
for (int i = 0; i < k_totalNumberOfCell; i++) {
|
||||
m_intervalCells[i].setParentResponder(&m_selectableTableView);
|
||||
m_intervalCells[i].textField()->setDelegate(this);
|
||||
m_intervalCells[i].textField()->setDraftTextBuffer(m_draftTextBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
const char * IntervalParameterController::title() {
|
||||
@@ -60,7 +65,7 @@ bool IntervalParameterController::setParameterAtIndex(int parameterIndex, double
|
||||
HighlightCell * IntervalParameterController::reusableParameterCell(int index, int type) {
|
||||
assert(index >= 0);
|
||||
assert(index < k_totalNumberOfCell);
|
||||
return m_intervalCells[index];
|
||||
return &m_intervalCells[index];
|
||||
}
|
||||
|
||||
bool IntervalParameterController::handleEvent(Ion::Events::Event event) {
|
||||
@@ -83,20 +88,4 @@ void IntervalParameterController::buttonAction() {
|
||||
}
|
||||
}
|
||||
|
||||
View * IntervalParameterController::loadView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::loadView();
|
||||
for (int i = 0; i < k_totalNumberOfCell; i++) {
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -24,10 +24,8 @@ private:
|
||||
int reusableParameterCellCount(int type) override;
|
||||
double parameterAtIndex(int index) override;
|
||||
void buttonAction() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
MessageTableCellWithEditableText * m_intervalCells[k_totalNumberOfCell];
|
||||
MessageTableCellWithEditableText m_intervalCells[k_totalNumberOfCell];
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -12,8 +12,19 @@ RangeParameterController::RangeParameterController(Responder * parentResponder,
|
||||
m_interactiveRange(interactiveRange),
|
||||
m_xRangeCells{},
|
||||
m_yRangeCells{},
|
||||
m_yAutoCell(nullptr)
|
||||
m_yAutoCell(I18n::Message::YAuto)
|
||||
{
|
||||
for (int i = 0; i < k_numberOfEditableTextCell; i++) {
|
||||
m_xRangeCells[i].setParentResponder(&m_selectableTableView);
|
||||
m_xRangeCells[i].textField()->setDelegate(this);
|
||||
m_xRangeCells[i].textField()->setDraftTextBuffer(m_draftTextBuffer);
|
||||
}
|
||||
for (int i = 0; i < k_numberOfConvertibleTextCell; i++) {
|
||||
m_yRangeCells[i].setParentResponder(&m_selectableTableView);
|
||||
m_yRangeCells[i].setInteractiveCurveViewRange(m_interactiveRange);
|
||||
m_yRangeCells[i].textField()->setDelegate(this);
|
||||
m_yRangeCells[i].textField()->setDraftTextBuffer(m_draftTextBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
const char * RangeParameterController::title() {
|
||||
@@ -42,7 +53,7 @@ void RangeParameterController::willDisplayCellForIndex(HighlightCell * cell, int
|
||||
return;
|
||||
}
|
||||
if (index == 2) {
|
||||
SwitchView * switchView = (SwitchView *)m_yAutoCell->accessoryView();
|
||||
SwitchView * switchView = (SwitchView *)m_yAutoCell.accessoryView();
|
||||
switchView->setState(m_interactiveRange->yAuto());
|
||||
return;
|
||||
}
|
||||
@@ -57,7 +68,7 @@ void RangeParameterController::willDisplayCellForIndex(HighlightCell * cell, int
|
||||
|
||||
bool RangeParameterController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) {
|
||||
if (FloatParameterController::textFieldDidFinishEditing(textField, text, event)) {
|
||||
selectableTableView()->reloadData();
|
||||
m_selectableTableView.reloadData();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -66,7 +77,7 @@ bool RangeParameterController::textFieldDidFinishEditing(TextField * textField,
|
||||
bool RangeParameterController::handleEvent(Ion::Events::Event event) {
|
||||
if (activeCell() == 2 && (event == Ion::Events::OK || event == Ion::Events::EXE)) {
|
||||
m_interactiveRange->setYAuto(!m_interactiveRange->yAuto());
|
||||
selectableTableView()->reloadData();
|
||||
m_selectableTableView.reloadData();
|
||||
return true;
|
||||
}
|
||||
return FloatParameterController::handleEvent(event);
|
||||
@@ -90,16 +101,16 @@ bool RangeParameterController::setParameterAtIndex(int parameterIndex, double f)
|
||||
HighlightCell * RangeParameterController::reusableParameterCell(int index, int type) {
|
||||
if (type == 2) {
|
||||
assert(index == 0);
|
||||
return m_yAutoCell;
|
||||
return &m_yAutoCell;
|
||||
}
|
||||
if (type == 1) {
|
||||
assert(index >= 0);
|
||||
assert(index < k_numberOfEditableTextCell);
|
||||
return m_xRangeCells[index];
|
||||
return &m_xRangeCells[index];
|
||||
}
|
||||
assert(index >= 0);
|
||||
assert(index < k_numberOfConvertibleTextCell);
|
||||
return m_yRangeCells[index];
|
||||
return &m_yRangeCells[index];
|
||||
}
|
||||
|
||||
int RangeParameterController::reusableParameterCellCount(int type) {
|
||||
@@ -112,31 +123,5 @@ int RangeParameterController::reusableParameterCellCount(int type) {
|
||||
return k_numberOfConvertibleTextCell;
|
||||
}
|
||||
|
||||
View * RangeParameterController::loadView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::loadView();
|
||||
m_yAutoCell = new MessageTableCellWithSwitch(I18n::Message::YAuto);
|
||||
for (int i = 0; i < k_numberOfEditableTextCell; i++) {
|
||||
m_xRangeCells[i] = new MessageTableCellWithEditableText(tableView, this, m_draftTextBuffer, I18n::Message::Default);
|
||||
}
|
||||
for (int i = 0; i < k_numberOfConvertibleTextCell; i++) {
|
||||
m_yRangeCells[i] = new MessageTableCellWithConvertibleEditableText(tableView, this, m_draftTextBuffer, I18n::Message::Default, m_interactiveRange);
|
||||
}
|
||||
return tableView;
|
||||
}
|
||||
|
||||
void RangeParameterController::unloadView(View * view) {
|
||||
delete m_yAutoCell;
|
||||
m_yAutoCell = nullptr;
|
||||
for (int i = 0; i < k_numberOfEditableTextCell; i++) {
|
||||
delete m_xRangeCells[i];
|
||||
m_xRangeCells[i] = nullptr;
|
||||
}
|
||||
for (int i = 0; i < k_numberOfConvertibleTextCell; i++) {
|
||||
delete m_yRangeCells[i];
|
||||
m_yRangeCells[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -19,9 +19,6 @@ public:
|
||||
private:
|
||||
class MessageTableCellWithConvertibleEditableText : public MessageTableCellWithEditableText {
|
||||
public:
|
||||
MessageTableCellWithConvertibleEditableText(Responder * parentResponder, TextFieldDelegate * textFieldDelegate, char * draftTextBuffer, I18n::Message message, InteractiveCurveViewRange * interactiveCurveViewRange) :
|
||||
MessageTableCellWithEditableText(parentResponder, textFieldDelegate, draftTextBuffer, message),
|
||||
m_interactiveRange(interactiveCurveViewRange) {}
|
||||
Responder * responder() override {
|
||||
if (m_interactiveRange->yAuto()) {
|
||||
return nullptr;
|
||||
@@ -29,6 +26,7 @@ private:
|
||||
return this;
|
||||
}
|
||||
}
|
||||
void setInteractiveCurveViewRange(InteractiveCurveViewRange * interactiveCurveViewRange) { m_interactiveRange = interactiveCurveViewRange; }
|
||||
private:
|
||||
InteractiveCurveViewRange * m_interactiveRange;
|
||||
};
|
||||
@@ -36,16 +34,14 @@ private:
|
||||
int reusableParameterCellCount(int type) override;
|
||||
double parameterAtIndex(int index) override;
|
||||
bool setParameterAtIndex(int parameterIndex, double f) override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
constexpr static int k_numberOfEditableTextCell = 2;
|
||||
constexpr static int k_numberOfConvertibleTextCell = 2;
|
||||
constexpr static int k_numberOfTextCell = k_numberOfEditableTextCell+k_numberOfConvertibleTextCell;
|
||||
InteractiveCurveViewRange * m_interactiveRange;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
MessageTableCellWithEditableText * m_xRangeCells[k_numberOfEditableTextCell];
|
||||
MessageTableCellWithConvertibleEditableText * m_yRangeCells[k_numberOfConvertibleTextCell];
|
||||
MessageTableCellWithSwitch * m_yAutoCell;
|
||||
MessageTableCellWithEditableText m_xRangeCells[k_numberOfEditableTextCell];
|
||||
MessageTableCellWithConvertibleEditableText m_yRangeCells[k_numberOfConvertibleTextCell];
|
||||
MessageTableCellWithSwitch m_yAutoCell;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -43,10 +43,17 @@ void IntervalController::ContentView::layoutSubviews() {
|
||||
|
||||
IntervalController::IntervalController(Responder * parentResponder, EquationStore * equationStore) :
|
||||
FloatParameterController(parentResponder),
|
||||
m_selectableTableView(nullptr),
|
||||
m_contentView(&m_selectableTableView),
|
||||
m_intervalCell{},
|
||||
m_equationStore(equationStore)
|
||||
{
|
||||
m_selectableTableView.setTopMargin(0);
|
||||
m_okButton.setMessage(I18n::Message::ResolveEquation);
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
m_intervalCell[i].setParentResponder(&m_selectableTableView);
|
||||
m_intervalCell[i].textField()->setDelegate(this);
|
||||
m_intervalCell[i].textField()->setDraftTextBuffer(m_draftTextBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
const char * IntervalController::title() {
|
||||
@@ -70,7 +77,7 @@ void IntervalController::willDisplayCellForIndex(HighlightCell * cell, int index
|
||||
HighlightCell * IntervalController::reusableParameterCell(int index, int type) {
|
||||
assert(index >= 0);
|
||||
assert(index < 2);
|
||||
return m_intervalCell[index];
|
||||
return &m_intervalCell[index];
|
||||
}
|
||||
|
||||
int IntervalController::reusableParameterCellCount(int type) {
|
||||
@@ -88,7 +95,7 @@ bool IntervalController::setParameterAtIndex(int parameterIndex, double f) {
|
||||
|
||||
bool IntervalController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) {
|
||||
if (FloatParameterController::textFieldDidFinishEditing(textField, text, event)) {
|
||||
m_selectableTableView->reloadData();
|
||||
m_selectableTableView.reloadData();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -101,34 +108,4 @@ void IntervalController::buttonAction() {
|
||||
stack->push(solverApp->solutionsControllerStack(), KDColorWhite, Palette::SubTab, Palette::SubTab);
|
||||
}
|
||||
|
||||
I18n::Message IntervalController::okButtonText() {
|
||||
return I18n::Message::ResolveEquation;
|
||||
}
|
||||
|
||||
View * IntervalController::loadView() {
|
||||
m_selectableTableView = (SelectableTableView *)FloatParameterController::loadView();
|
||||
m_selectableTableView->setTopMargin(0);
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
m_intervalCell[i] = new MessageTableCellWithEditableText(m_selectableTableView, this, m_draftTextBuffer);
|
||||
}
|
||||
ContentView * contentView = (ContentView *)new ContentView(m_selectableTableView);
|
||||
return contentView;
|
||||
}
|
||||
|
||||
void IntervalController::unloadView(View * view) {
|
||||
delete m_selectableTableView;
|
||||
m_selectableTableView = nullptr;
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
delete m_intervalCell[i];
|
||||
m_intervalCell[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView(view);
|
||||
}
|
||||
|
||||
SelectableTableView * IntervalController::selectableTableView() {
|
||||
return m_selectableTableView;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ class IntervalController : public Shared::FloatParameterController {
|
||||
public:
|
||||
IntervalController(Responder * parentResponder, EquationStore * equationStore);
|
||||
const char * title() override;
|
||||
View * view() override { return &m_contentView; }
|
||||
int numberOfRows() override;
|
||||
void willDisplayCellForIndex(HighlightCell * cell, int index) override;
|
||||
private:
|
||||
@@ -20,9 +21,6 @@ private:
|
||||
double parameterAtIndex(int index) override;
|
||||
bool setParameterAtIndex(int parameterIndex, double f) override;
|
||||
bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override;
|
||||
I18n::Message okButtonText() override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
class ContentView : public View {
|
||||
public:
|
||||
ContentView(SelectableTableView * selectableTableView);
|
||||
@@ -36,11 +34,10 @@ private:
|
||||
MessageTextView m_instructions1;
|
||||
SelectableTableView * m_selectableTableView;
|
||||
};
|
||||
SelectableTableView * selectableTableView() override;
|
||||
SelectableTableView * m_selectableTableView;
|
||||
ContentView m_contentView;
|
||||
constexpr static int k_maxNumberOfCells = 2;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
MessageTableCellWithEditableText * m_intervalCell[k_maxNumberOfCells];
|
||||
MessageTableCellWithEditableText m_intervalCell[k_maxNumberOfCells];
|
||||
EquationStore * m_equationStore;
|
||||
};
|
||||
|
||||
|
||||
@@ -12,6 +12,11 @@ HistogramParameterController::HistogramParameterController(Responder * parentRes
|
||||
m_cells{},
|
||||
m_store(store)
|
||||
{
|
||||
for (int i = 0; i < k_numberOfCells; i++) {
|
||||
m_cells[i].setParentResponder(&m_selectableTableView);
|
||||
m_cells[i].textField()->setDelegate(this);
|
||||
m_cells[i].textField()->setDraftTextBuffer(m_draftTextBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
const char * HistogramParameterController::title() {
|
||||
@@ -99,23 +104,7 @@ bool HistogramParameterController::setParameterAtIndex(int parameterIndex, doubl
|
||||
|
||||
HighlightCell * HistogramParameterController::reusableParameterCell(int index, int type) {
|
||||
assert(index >= 0 && index < k_numberOfCells);
|
||||
return m_cells[index];
|
||||
}
|
||||
|
||||
View * HistogramParameterController::loadView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::loadView();
|
||||
for (int i = 0; i < k_numberOfCells; i++) {
|
||||
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);
|
||||
return &m_cells[index];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -19,10 +19,8 @@ private:
|
||||
int reusableParameterCellCount(int type) override { return k_numberOfCells; }
|
||||
double parameterAtIndex(int index) override;
|
||||
bool setParameterAtIndex(int parameterIndex, double f) override;
|
||||
View * loadView() override;
|
||||
void unloadView(View * view) override;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
MessageTableCellWithEditableText * m_cells[k_numberOfCells];
|
||||
MessageTableCellWithEditableText m_cells[k_numberOfCells];
|
||||
Store * m_store;
|
||||
};
|
||||
|
||||
|
||||
@@ -7,8 +7,9 @@
|
||||
|
||||
class MessageTableCellWithEditableText : public Responder, public MessageTableCell {
|
||||
public:
|
||||
MessageTableCellWithEditableText(Responder * parentResponder, TextFieldDelegate * textFieldDelegate, char * draftTextBuffer, I18n::Message message = (I18n::Message)0);
|
||||
MessageTableCellWithEditableText(Responder * parentResponder = nullptr, TextFieldDelegate * textFieldDelegate = nullptr, char * draftTextBuffer = nullptr, I18n::Message message = (I18n::Message)0);
|
||||
View * accessoryView() const override;
|
||||
TextField * textField() { return &m_textField; }
|
||||
const char * editedText() const;
|
||||
void didBecomeFirstResponder() override;
|
||||
bool isEditing();
|
||||
|
||||
Reference in New Issue
Block a user