Files
Upsilon/apps/shared/editable_expression_view_delegate_app.cpp
Léa Saviot 4d778b5d9f [apps/escher/poincare] Use 2D Edition in Sequence and Graph apps.
EditableExpressionView is renamed ScrollableViewWithCursor.
EditableExpressionView is now a View that displays either a TextField or
a ScrollableViewWithCursor, depending on Poincare::Preferences.

Change-Id: Id44ddcd9a83f5fd17d65753ca4c94c5c7cda9b8a
2018-01-23 10:28:02 +01:00

57 lines
2.7 KiB
C++

#include "editable_expression_view_delegate_app.h"
#include "../i18n.h"
#include "../apps_container.h"
using namespace Poincare;
namespace Shared {
EditableExpressionViewDelegateApp::EditableExpressionViewDelegateApp(Container * container, Snapshot * snapshot, ViewController * rootViewController) :
TextFieldDelegateApp(container, snapshot, rootViewController),
ScrollableExpressionViewWithCursorDelegate()
{
}
bool EditableExpressionViewDelegateApp::scrollableExpressionViewWithCursorShouldFinishEditing(ScrollableExpressionViewWithCursor * scrollableExpressionViewWithCursor, Ion::Events::Event event) {
return event == Ion::Events::OK || event == Ion::Events::EXE;
}
bool EditableExpressionViewDelegateApp::scrollableExpressionViewWithCursorDidReceiveEvent(ScrollableExpressionViewWithCursor * scrollableExpressionViewWithCursor, Ion::Events::Event event) {
if (scrollableExpressionViewWithCursor->isEditing() && scrollableExpressionViewWithCursor->scrollableExpressionViewWithCursorShouldFinishEditing(event)) {
if (!scrollableExpressionViewWithCursor->expressionViewWithCursor()->expressionView()->expressionLayout()->hasText()) {
scrollableExpressionViewWithCursor->app()->displayWarning(I18n::Message::SyntaxError);
return true;
}
int bufferSize = 256;
char buffer[bufferSize];
scrollableExpressionViewWithCursor->expressionViewWithCursor()->expressionView()->expressionLayout()->writeTextInBuffer(buffer, bufferSize);
Expression * exp = Expression::parse(buffer);
if (exp != nullptr) {
delete exp;
}
if (exp == nullptr) {
scrollableExpressionViewWithCursor->app()->displayWarning(I18n::Message::SyntaxError);
return true;
}
}
if (event == Ion::Events::Var) {
if (!scrollableExpressionViewWithCursor->isEditing()) {
scrollableExpressionViewWithCursor->setEditing(true);
}
AppsContainer * appsContainer = (AppsContainer *)scrollableExpressionViewWithCursor->app()->container();
VariableBoxController * variableBoxController = appsContainer->variableBoxController();
variableBoxController->setScrollableExpressionViewWithCursorSender(scrollableExpressionViewWithCursor);
scrollableExpressionViewWithCursor->app()->displayModalViewController(variableBoxController, 0.f, 0.f, Metric::PopUpTopMargin, Metric::PopUpLeftMargin, 0, Metric::PopUpRightMargin);
return true;
}
return false;
}
Toolbox * EditableExpressionViewDelegateApp::toolboxForScrollableExpressionViewWithCursor(ScrollableExpressionViewWithCursor * scrollableExpressionViewWithCursor) {
Toolbox * toolbox = container()->mathToolbox();
static_cast<MathToolbox *>(toolbox)->setSenderAndAction(scrollableExpressionViewWithCursor, MathToolbox::actionForScrollableExpressionViewWithCursor);
return toolbox;
}
}