mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 08:47:28 +01:00
70 lines
2.5 KiB
C++
70 lines
2.5 KiB
C++
#include "app.h"
|
|
#include "../apps_container.h"
|
|
#include "code_icon.h"
|
|
#include "../shared/toolbox_helpers.h"
|
|
#include "../i18n.h"
|
|
|
|
namespace Code {
|
|
|
|
I18n::Message App::Descriptor::name() {
|
|
return I18n::Message::CodeApp;
|
|
}
|
|
|
|
I18n::Message App::Descriptor::upperName() {
|
|
return I18n::Message::CodeAppCapital;
|
|
}
|
|
|
|
const Image * App::Descriptor::icon() {
|
|
return ImageStore::CodeIcon;
|
|
}
|
|
|
|
App * App::Snapshot::unpack(Container * container) {
|
|
return new App(container, this);
|
|
}
|
|
|
|
void App::Snapshot::reset() {
|
|
m_scriptStore.deleteAllScripts();
|
|
}
|
|
|
|
App::Descriptor * App::Snapshot::descriptor() {
|
|
static Descriptor descriptor;
|
|
return &descriptor;
|
|
}
|
|
|
|
ScriptStore * App::Snapshot::scriptStore() {
|
|
return &m_scriptStore;
|
|
}
|
|
|
|
App::App(Container * container, Snapshot * snapshot) :
|
|
::App(container, snapshot, &m_codeStackViewController, I18n::Message::Warning),
|
|
m_listFooter(&m_codeStackViewController, &m_menuController, &m_menuController, ButtonRowController::Position::Bottom, ButtonRowController::Style::EmbossedGrey, ButtonRowController::Size::Large),
|
|
m_menuController(&m_listFooter, snapshot->scriptStore(), &m_listFooter),
|
|
m_codeStackViewController(&m_modalViewController, &m_listFooter),
|
|
m_toolboxActionForTextArea([](void * sender, const char * text) {
|
|
TextArea * textArea = static_cast<TextArea *>(sender);
|
|
int previousCursorLocation = textArea->cursorLocation();
|
|
textArea->insertTextWithIndentation(text);
|
|
// insertText() also moves the cursor. We need to re-move it to the
|
|
// position we want (which is after the first parenthesis or before the
|
|
// first point).
|
|
int deltaCursorLocation = - textArea->cursorLocation() + previousCursorLocation + Shared::ToolboxHelpers::CursorIndexInCommand(text);
|
|
// WARNING: This is a dirty and only works because the cursor location we
|
|
// want is always on the first line of the text we insert. Because of the
|
|
// auto indentation, it would be difficult to compute the wanted cursor
|
|
// location on other lines of the text.
|
|
textArea->moveCursor(deltaCursorLocation);
|
|
}),
|
|
m_toolboxActionForTextField([](void * sender, const char * text) {
|
|
TextField * textField = static_cast<TextField *>(sender);
|
|
if (!textField->isEditing()) {
|
|
textField->setEditing(true);
|
|
}
|
|
int newCursorLocation = textField->cursorLocation() + Shared::ToolboxHelpers::CursorIndexInCommand(text);
|
|
textField->insertTextAtLocation(text, textField->cursorLocation());
|
|
textField->setCursorLocation(newCursorLocation);
|
|
})
|
|
{
|
|
}
|
|
|
|
}
|