2 #include "../constant.h" 3 #include "../apps_container.h" 9 #include "images/calcul1_icon.h" 10 #include "images/calcul2_icon.h" 11 #include "images/calcul3_icon.h" 12 #include "images/calcul4_icon.h" 13 #include "images/focused_calcul1_icon.h" 14 #include "images/focused_calcul2_icon.h" 15 #include "images/focused_calcul3_icon.h" 16 #include "images/focused_calcul4_icon.h" 26 m_titleView(
KDText::FontSize::Small,
I18n::Message::ComputeProbability, 0.5f, 0.5f,
Palette::GreyDark,
Palette::WallScreen),
27 m_selectableTableView(selectableTableView),
28 m_lawCurveView(law, calculation)
32 int CalculationController::ContentView::numberOfSubviews()
const {
36 View * CalculationController::ContentView::subviewAtIndex(
int index) {
37 assert(index >= 0 && index < 3);
42 return m_selectableTableView;
44 return &m_lawCurveView;
47 void CalculationController::ContentView::layoutSubviews() {
49 m_titleView.setFrame(
KDRect(0, 0, bounds().width(), titleHeight));
51 m_selectableTableView->setFrame(
KDRect(0, titleHeight, bounds().width(), calculationHeight));
52 m_lawCurveView.setFrame(
KDRect(0, titleHeight+calculationHeight, bounds().width(), bounds().height() - calculationHeight - titleHeight));
57 m_contentView(&m_selectableTableView, law, calculation),
58 m_selectableTableView(this),
59 m_imageCell(&m_selectableTableView, law, calculation, this),
61 m_calculation(calculation),
65 assert(calculation !=
nullptr);
66 m_selectableTableView.setMargins(k_tableMargin);
67 m_selectableTableView.setVerticalCellOverlap(0);
68 m_selectableTableView.setShowsIndicators(
false);
72 for (
int i = 0; i < k_numberOfCalculationCells; i++) {
73 m_calculationCells[i].editableTextCell()->setParentResponder(&m_selectableTableView);
74 m_calculationCells[i].editableTextCell()->textField()->setDelegate(
this);
75 m_calculationCells[i].editableTextCell()->textField()->setDraftTextBuffer(m_draftTextBuffer);
101 return &m_contentView;
105 return m_titleBuffer;
146 for (
int k = 0; k < j; k++) {
158 return (result < offsetX || offsetX == 0) ? i : i - 1;
170 return (offsetY - 1) / height;
179 return &m_calculationCells[type-1];
196 myCell->
setImage(images[(
int)m_calculation->
type()], focusedImages[(int)m_calculation->
type()]);
200 bool calculationCellIsResponder =
true;
202 calculationCellIsResponder =
false;
216 if (returnValue && textHasChanged) {
221 m_selectableTableView.
reloadData(shouldUpdateFirstResponder);
237 double floatBody = Expression::approximateToScalar<double>(text, *globalContext);
243 if (floatBody < 0.0) {
246 if (floatBody > 1.0) {
262 m_contentView.lawCurveView()->reload();
271 if ((
int)m_calculation->
type() == index && !forceReinitialisation) {
291 m_calculation->
setLaw(m_law);
298 void CalculationController::updateTitle() {
302 strlcpy(m_titleBuffer+currentChar,
" = ", 4);
306 strlcpy(m_titleBuffer+currentChar, buffer,
strlen(buffer)+1);
307 currentChar +=
strlen(buffer);
308 m_titleBuffer[currentChar++] =
' ';
310 m_titleBuffer[currentChar-1] = 0;
virtual bool isContinuous() const =0
virtual double parameterAtIndex(int index)=0
EditableTextCell * editableTextCell()
int indexFromCumulatedWidth(KDCoordinate offsetX) override
virtual I18n::Message parameterNameAtIndex(int index)=0
HighlightCell * selectedCell()
int reusableCellCount(int type) override
static constexpr KDCoordinate k_oneCellHeight
KDCoordinate cumulatedHeightFromIndex(int j) override
void setText(const char *text)
size_t cursorLocation() const
constexpr KDCoordinate width() const
KDSize minimalSizeForOptimalDisplay() const override
bool textFieldShouldFinishEditing(TextField *textField, Ion::Events::Event event) override
void willDisplayCellAtLocation(HighlightCell *cell, int i, int j) override
bool textFieldDidFinishEditing(TextField *textField, const char *text, Ion::Events::Event event) override
size_t strlcpy(char *dst, const char *src, size_t len)
virtual int numberOfParameter()=0
const char * title() override
static constexpr int ShortNumberOfSignificantDigits
virtual float parameterValueAtIndex(int index)=0
void setCalculationAccordingToIndex(int index, bool forceReinitialisation=false)
virtual ~Calculation()=default
void store(const char *storedText)
void reloadData(bool setFirstResponder=true)
void reloadLawCurveView()
int typeAtLocation(int i, int j) override
enum Message uint16_t enum Language uint16_t const char * translate(Message m, Language l=(Language) 0)
virtual I18n::Message legendForParameterAtIndex(int index)=0
constexpr KDColor KDColorWhite
KDCoordinate columnWidth(int i) override
size_t strlen(const char *s)
bool textFieldDidHandleEvent(TextField *textField, bool returnValue, bool textHasChanged) override
void displayWarning(I18n::Message warningMessage)
void setMessage(I18n::Message message)
Poincare::Context * globalContext()
HighlightCell * reusableCell(int index, int type) override
virtual void viewWillAppear()
virtual Type type() const =0
static constexpr int LargeNumberOfSignificantDigits
KDSize minimalSizeForOptimalDisplay() const override
Responder * firstResponder()
void didBecomeFirstResponder() override
void setResponder(bool shouldbeResponder)
int numberOfRows() override
const char * text() const
KDCoordinate rowHeight(int j) override
void viewWillAppear() override
MessageTextView * messageTextView()
CalculationController(Responder *parentResponder, Law *law, Calculation *calculation)
size_t draftTextLength() const
void setImage(const Image *image, const Image *focusedImage)
void setFirstResponder(Responder *responder)
int indexFromCumulatedHeight(KDCoordinate offsetY) override
virtual bool textFieldShouldFinishEditing(TextField *textField, Ion::Events::Event event)=0
virtual bool handleEvent(Ion::Events::Event event) override
int numberOfColumns() override
static Clipboard * sharedClipboard()
static constexpr KDSize charSize(FontSize size=FontSize::Large)
void didEnterResponderChain(Responder *previousResponder) override
virtual void viewDidDisappear()
virtual int numberOfParameters()=0
void setActivePage(Page activePage)
void selectCellAtLocation(int i, int j)
void viewDidDisappear() override
static constexpr int k_numberOfImages
bool handleEvent(Ion::Events::Event event) override
AppsContainer * container()
virtual void setParameterAtIndex(double f, int index)=0
void scrollToCursor() override
KDCoordinate cumulatedWidthFromIndex(int i) override
constexpr KDCoordinate height() const