mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/graph/list] Apply changes on confirm with function interval selection
Change-Id: I0ec1ae54788f1c72fc8277544ed51a85ba4474d5
This commit is contained in:
committed by
Émilie Feral
parent
cce1fa0c90
commit
cbd26e69d1
@@ -10,7 +10,8 @@ namespace Graph {
|
||||
DomainParameterController::DomainParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate) :
|
||||
FloatParameterController<float>(parentResponder),
|
||||
m_domainCells{},
|
||||
m_record()
|
||||
m_record(),
|
||||
m_tempDomain()
|
||||
{
|
||||
for (int i = 0; i < k_totalNumberOfCell; i++) {
|
||||
m_domainCells[i].setParentResponder(&m_selectableTableView);
|
||||
@@ -18,12 +19,10 @@ DomainParameterController::DomainParameterController(Responder * parentResponder
|
||||
}
|
||||
}
|
||||
|
||||
const char * DomainParameterController::title() {
|
||||
return I18n::translate(I18n::Message::FunctionDomain);
|
||||
}
|
||||
|
||||
int DomainParameterController::numberOfRows() const {
|
||||
return k_totalNumberOfCell+1;
|
||||
void DomainParameterController::viewWillAppear() {
|
||||
// Initialize m_tempParameters to the extracted value.
|
||||
extractParameters();
|
||||
FloatParameterController::viewWillAppear();
|
||||
}
|
||||
|
||||
void DomainParameterController::willDisplayCellForIndex(HighlightCell * cell, int index) {
|
||||
@@ -56,10 +55,6 @@ void DomainParameterController::willDisplayCellForIndex(HighlightCell * cell, in
|
||||
FloatParameterController::willDisplayCellForIndex(cell, index);
|
||||
}
|
||||
|
||||
int DomainParameterController::reusableParameterCellCount(int type) {
|
||||
return k_totalNumberOfCell;
|
||||
}
|
||||
|
||||
HighlightCell * DomainParameterController::reusableParameterCell(int index, int type) {
|
||||
assert(index >= 0 && index < k_totalNumberOfCell);
|
||||
return &m_domainCells[index];
|
||||
@@ -74,16 +69,38 @@ bool DomainParameterController::handleEvent(Ion::Events::Event event) {
|
||||
}
|
||||
|
||||
float DomainParameterController::parameterAtIndex(int index) {
|
||||
return index == 0 ? function()->tMin() : function()->tMax();
|
||||
return index == 0 ? m_tempDomain.min() : m_tempDomain.max();
|
||||
}
|
||||
|
||||
void DomainParameterController::extractParameters() {
|
||||
setParameterAtIndex(0, function()->tMin());
|
||||
setParameterAtIndex(1, function()->tMax());
|
||||
/* Setting m_tempDomain tMin might affect m_tempDomain.max(), but setting tMax
|
||||
* right after will not affect m_tempDomain.min() because Function's Range1D
|
||||
* parameters are valid (tMax>tMin), and final tMin value is already set.
|
||||
* Same happens in confirmParameters when setting function's parameters from
|
||||
* valid m_tempDomain parameters. */
|
||||
assert(function()->tMin() == m_tempDomain.min());
|
||||
assert(function()->tMax() == m_tempDomain.max());
|
||||
}
|
||||
|
||||
bool DomainParameterController::setParameterAtIndex(int parameterIndex, float f) {
|
||||
// TODO: what to do if the xmin > xmax?
|
||||
parameterIndex == 0 ? function()->setTMin(f) : function()->setTMax(f);
|
||||
/* Setting Min (or Max) parameter can alter the previously set Max
|
||||
* (or Min) parameter if Max <= Min. */
|
||||
parameterIndex == 0 ? m_tempDomain.setMin(f) : m_tempDomain.setMax(f);
|
||||
return true;
|
||||
}
|
||||
|
||||
void DomainParameterController::confirmParameters() {
|
||||
function()->setTMin(parameterAtIndex(0));
|
||||
function()->setTMax(parameterAtIndex(1));
|
||||
// See comment on Range1D initialization in extractParameters
|
||||
assert(function()->tMin() == m_tempDomain.min());
|
||||
assert(function()->tMax() == m_tempDomain.max());
|
||||
}
|
||||
|
||||
void DomainParameterController::buttonAction() {
|
||||
confirmParameters();
|
||||
StackViewController * stack = stackController();
|
||||
stack->pop();
|
||||
stack->pop();
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "../../shared/continuous_function.h"
|
||||
#include "../../shared/expiring_pointer.h"
|
||||
#include "../../shared/float_parameter_controller.h"
|
||||
#include "../../shared/range_1D.h"
|
||||
|
||||
namespace Graph {
|
||||
|
||||
@@ -14,17 +15,18 @@ public:
|
||||
DomainParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate);
|
||||
|
||||
// ViewController
|
||||
const char * title() override;
|
||||
const char * title() override { return I18n::translate(I18n::Message::FunctionDomain); }
|
||||
TELEMETRY_ID("DomainParameter");
|
||||
|
||||
// ListViewDataSource
|
||||
int numberOfRows() const override;
|
||||
int numberOfRows() const override { return k_totalNumberOfCell+1; }
|
||||
void willDisplayCellForIndex(HighlightCell * cell, int index) override;
|
||||
|
||||
void setRecord(Ion::Storage::Record record) { m_record = record; }
|
||||
private:
|
||||
constexpr static int k_totalNumberOfCell = 2;
|
||||
int reusableParameterCellCount(int type) override;
|
||||
void viewWillAppear() override;
|
||||
int reusableParameterCellCount(int type) override { return k_totalNumberOfCell; }
|
||||
HighlightCell * reusableParameterCell(int index, int type) override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
bool setParameterAtIndex(int parameterIndex, float f) override;
|
||||
@@ -32,8 +34,13 @@ private:
|
||||
void buttonAction() override;
|
||||
InfinityTolerance infinityAllowanceForRow(int row) const override;
|
||||
Shared::ExpiringPointer<Shared::ContinuousFunction> function() const;
|
||||
// Applies temporary parameters to function.
|
||||
void confirmParameters();
|
||||
// Extracts parameters from function, setting m_tempDomain parameters.
|
||||
void extractParameters();
|
||||
MessageTableCellWithEditableText m_domainCells[k_totalNumberOfCell];
|
||||
Ion::Storage::Record m_record;
|
||||
Shared::Range1D m_tempDomain;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user