Files
Upsilon/apps/calcul/edit_expression_controller.cpp
Émilie Feral c0c889fde2 [apps/calcul] Add calcul to the history from the text field
Change-Id: Ie3c00b9dbe27f7fb61cc3cb073aa9b0e2a846dd6
2016-10-24 15:24:02 +02:00

98 lines
2.6 KiB
C++

#include "edit_expression_controller.h"
#include "app.h"
#include <assert.h>
namespace Calcul {
EditExpressionController::ContentView::ContentView(View * subview) :
View(),
m_mainView(subview),
m_textField(nullptr, m_textBody, 255)
{
m_textBody[0] = 0;
}
int EditExpressionController::ContentView::numberOfSubviews() const {
return 2;
}
View * EditExpressionController::ContentView::subviewAtIndex(int index) {
switch (index) {
case 0:
return m_mainView;
case 1:
return &m_textField;
default:
assert(false);
return nullptr;
}
}
void EditExpressionController::ContentView::layoutSubviews() {
KDRect mainViewFram(0, 0, bounds().width(), bounds().height() - k_textFieldHeight);
m_mainView->setFrame(mainViewFram);
KDRect inputViewFram(0, bounds().height() - k_textFieldHeight, bounds().width(), k_textFieldHeight);
m_textField.setFrame(inputViewFram);
}
TextField * EditExpressionController::ContentView::textField() {
return &m_textField;
}
EditExpressionController::EditExpressionController(Responder * parentResponder, HistoryController * historyController, CalculStore * calculStore) :
ViewController(parentResponder),
m_contentView(historyController->view()),
m_historyController(historyController),
m_calculStore(calculStore)
{
m_contentView.textField()->setParentResponder(this);
}
View * EditExpressionController::view() {
return &m_contentView;
}
const char * EditExpressionController::title() const {
return "EditExpressionController";
}
const char * EditExpressionController::textBody() {
return m_contentView.textField()->textBuffer();
}
void EditExpressionController::setTextBody(const char * text) {
m_contentView.textField()->setTextBuffer(text);
}
bool EditExpressionController::handleEvent(Ion::Events::Event event) {
switch (event) {
case Ion::Events::Event::ENTER:
{
Calcul * calcul = m_calculStore->addEmptyCalcul();
App * calculApp = (App *)app();
calcul->setContent(textBody(), calculApp->globalContext());
m_historyController->reload();
m_contentView.textField()->setTextBuffer("");
return true;
}
case Ion::Events::Event::ESC:
return true;
case Ion::Events::Event::UP_ARROW:
app()->setFirstResponder(m_historyController);
return true;
default:
return false;
}
}
void EditExpressionController::didBecomeFirstResponder() {
app()->setFirstResponder(m_contentView.textField());
}
void EditExpressionController::edit(const char * initialContent) {
setTextBody(initialContent);
app()->setFirstResponder(this);
}
}