[apps/calculation] Remember input layout

When leaving the Calculation app, the layout currently being edited is
now stored in a buffer, to be restored when the app resumes.

Change-Id: I59c16e18f7193bdcbb36888b54cb2722897f85f5
This commit is contained in:
Gabriel Ozouf
2020-06-11 16:32:49 +02:00
committed by Émilie Feral
parent 8ab23f66b5
commit e295516928
2 changed files with 10 additions and 1 deletions

View File

@@ -56,9 +56,16 @@ void EditExpressionController::insertTextBody(const char * text) {
void EditExpressionController::didBecomeFirstResponder() {
m_contentView.mainView()->scrollToBottom();
m_contentView.expressionField()->setEditing(true, false);
m_contentView.expressionField()->restoreLayout(m_cacheBuffer, *m_cacheBufferInformation);
clearCacheBuffer();
Container::activeApp()->setFirstResponder(m_contentView.expressionField());
}
void EditExpressionController::willExitResponderChain(Responder * nextFirstResponder) {
*m_cacheBufferInformation = m_contentView.expressionField()->dumpLayout(m_cacheBuffer, k_cacheBufferSize);
::ViewController::willExitResponderChain(nextFirstResponder);
}
void EditExpressionController::viewWillAppear() {
m_historyController->viewWillAppear();
}
@@ -129,7 +136,7 @@ bool EditExpressionController::inputViewDidReceiveEvent(Ion::Events::Event event
}
if (event == Ion::Events::Up) {
if (m_calculationStore->numberOfCalculations() > 0) {
m_cacheBuffer[0] = 0;
clearCacheBuffer();
m_contentView.expressionField()->setEditing(false, false);
Container::activeApp()->setFirstResponder(m_historyController);
}

View File

@@ -27,6 +27,7 @@ public:
View * view() override { return &m_contentView; }
void didBecomeFirstResponder() override;
void willExitResponderChain(Responder * nextFirstResponder) override;
void viewWillAppear() override;
void insertTextBody(const char * text);
@@ -56,6 +57,7 @@ private:
ExpressionField m_expressionField;
};
void reloadView();
void clearCacheBuffer() { m_cacheBuffer[0] = 0; *m_cacheBufferInformation = 0; }
bool inputViewDidReceiveEvent(Ion::Events::Event event, bool shouldDuplicateLastCalculation);
bool inputViewDidFinishEditing(const char * text, Poincare::Layout layoutR);
bool inputViewDidAbortEditing(const char * text);