textedit: simplified implementation

This commit is contained in:
Raphael Coeffic
2022-08-18 12:12:02 +10:00
committed by Peter Feerick
parent 7ab53f757f
commit 84f402569f
3 changed files with 29 additions and 239 deletions
+12 -131
View File
@@ -41,15 +41,12 @@
#endif
TextEdit::TextEdit(Window *parent, const rect_t &rect, char *value,
uint8_t length, LcdFlags windowFlags,
const char *_extra_chars) :
uint8_t length, LcdFlags windowFlags) :
FormField(parent, rect, windowFlags, 0,
field_edit_create),
value(value),
length(length)
{
extra_chars = (_extra_chars) ? _extra_chars : extra_chars_default;
// properties
lv_obj_set_scrollbar_mode(lvobj, LV_SCROLLBAR_MODE_OFF);
lv_textarea_set_password_mode(lvobj, false);
@@ -72,13 +69,6 @@ void TextEdit::update()
lv_textarea_set_text(lvobj, txt.c_str());
}
void TextEdit::setCursorPos(int cursorPos)
{
this->cursorPos = cursorPos;
if (lvobj != nullptr)
lv_textarea_set_cursor_pos(lvobj, cursorPos);
}
void TextEdit::trim()
{
for (int i = length - 1; i >= 0; i--) {
@@ -89,134 +79,25 @@ void TextEdit::trim()
}
}
void TextEdit::onEvent(event_t event)
void TextEdit::changeEnd(bool forceChanged)
{
TRACE_WINDOWS("%s received event 0x%X", getWindowDebugString().c_str(), event);
if (lvobj == nullptr) return;
if (IS_VIRTUAL_KEY_EVENT(event)) {
uint8_t c = event & 0xFF;
if (c == LV_KEY_ENTER) {
changeEnd();
}
bool changed = false;
auto text = lv_textarea_get_text(lvobj);
if (strncmp(value, text, length) != 0) {
changed = true;
}
// #if defined(HARDWARE_KEYS)
// if (editMode) {
// int c = value[cursorPos];
// int v = c;
// switch (event) {
// case EVT_ROTARY_RIGHT:
// for (int i = 0; i < ROTARY_ENCODER_SPEED(); i++) {
// v = getNextChar(v);
// }
// break;
// case EVT_ROTARY_LEFT:
// for (int i = 0; i < ROTARY_ENCODER_SPEED(); i++) {
// v = getPreviousChar(v);
// }
// break;
// case EVT_KEY_BREAK(KEY_LEFT):
// if (cursorPos > 0) {
// setCursorPos(cursorPos - 1);
// }
// break;
// case EVT_KEY_BREAK(KEY_RIGHT):
// if (cursorPos < length - 1 && value[cursorPos + 1] != '\0') {
// setCursorPos(cursorPos + 1);
// }
// break;
// case EVT_KEY_BREAK(KEY_ENTER):
// if (cursorPos < length - 1) {
// if (value[cursorPos] == '\0') {
// value[cursorPos] = ' ';
// changed = true;
// }
// cursorPos++;
// if (value[cursorPos] == '\0') {
// value[cursorPos] = ' ';
// changed = true;
// }
// update();
// setCursorPos(cursorPos);
// }
// else {
// changeEnd();
// FormField::onEvent(event);
// }
// break;
// case EVT_KEY_LONG(KEY_ENTER):
// {
// killEvents(event);
// auto menu = new Menu(this);
// menu->setTitle(STR_EDIT);
// #if defined(CLIPBOARD)
// menu->addLine(STR_COPY, [=] {
// clipboard.write((uint8_t *)value, length, Clipboard::CONTENT_TEXT);
// });
// if (clipboard.contentType == Clipboard::CONTENT_TEXT) {
// menu->addLine(STR_PASTE, [=] {
// clipboard.read((uint8_t *)value, length);
// changeEnd(true);
// });
// }
// #endif
// menu->addLine(STR_CLEAR, [=] {
// memset(value, 0, length);
// changeEnd(true);
// });
// break;
// }
// case EVT_KEY_BREAK(KEY_UP):
// v = toggleCase(v);
// break;
// case EVT_KEY_LONG(KEY_LEFT):
// case EVT_KEY_LONG(KEY_RIGHT):
// v = toggleCase(v);
// if (event == EVT_KEY_LONG(KEY_LEFT)) {
// killEvents(KEY_LEFT);
// }
// break;
// case EVT_KEY_BREAK(KEY_PGDN):
// if (cursorPos < length) {
// memmove(&value[cursorPos], &value[cursorPos + 1], length - cursorPos - 1);
// value[length - 1] = '\0';
// changed = true;
// if (cursorPos > 0 && value[cursorPos] == '\0') {
// cursorPos = cursorPos - 1;
// }
// update();
// setCursorPos(cursorPos);
// }
// break;
// }
// if (c != v) {
// // TRACE("value[%d] = %d", cursorPos, v);
// value[cursorPos] = v;
// update();
// setCursorPos(cursorPos);
// changed = true;
// }
// }
// else {
// FormField::onEvent(event);
// setCursorPos(0);
// }
// #endif
if (changed || forceChanged) {
strncpy(value, text, length);
trim();
FormField::changeEnd();
}
}
void TextEdit::onClicked()
{
cursorPos = lv_textarea_get_cursor_pos(lvobj);
TextKeyboard::show(this);
}