#include "edit_expression_controller.h" #include "app.h" #include namespace Calculation { 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, CalculationStore * calculationStore) : ViewController(parentResponder), m_contentView(historyController->view()), m_historyController(historyController), m_calculationStore(calculationStore) { 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: { Calculation * calculation = m_calculationStore->addEmptyCalculation(); App * calculationApp = (App *)app(); calculation->setContent(textBody(), calculationApp->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); } }