Fixed editName() 212x64

This commit is contained in:
Raphael Coeffic
2021-06-05 20:29:09 +02:00
committed by Raphael Coeffic
parent 057401fcb1
commit b429855675
31 changed files with 169 additions and 70 deletions
+48 -11
View File
@@ -154,7 +154,30 @@ char getPreviousChar(char c, uint8_t position)
return c - 1;
}
void editName(coord_t x, coord_t y, char * name, uint8_t size, event_t event, uint8_t active, LcdFlags attr)
static bool isNameCharset(int v)
{
char c = (char)v;
if (c == ' ')
return true;
if (c == '-')
return true;
if (c >= '0' && c <= '9')
return true;
if (c >= 'A' && c <= 'Z')
return true;
if (c >= 'a' && c <= 'z')
return true;
return false;
}
void editName(coord_t x, coord_t y, char* name, uint8_t size, event_t event,
uint8_t active, LcdFlags attr, uint8_t old_editMode)
{
uint8_t mode = 0;
if (active) {
@@ -171,16 +194,10 @@ void editName(coord_t x, coord_t y, char * name, uint8_t size, event_t event, ui
uint8_t cur = editNameCursorPos;
if (s_editMode > 0) {
int8_t c = name[cur];
int8_t v = c;
int8_t v = c ? c : ' ';
if (IS_NEXT_EVENT(event) || IS_PREVIOUS_EVENT(event)) {
if (attr == ZCHAR) {
v = checkIncDec(event, abs(v), 0, ZCHAR_MAX, 0);
if (c <= 0) v = -v;
}
else {
v = checkIncDec(event, abs(v), ' ', 'z', 0);
}
v = checkIncDec(event, abs(v), ' ', 'z', 0, isNameCharset);
}
switch (event) {
@@ -250,6 +267,25 @@ void editName(coord_t x, coord_t y, char * name, uint8_t size, event_t event, ui
}
editNameCursorPos = cur;
lcdNextPos = backupNextPos;
if ((old_editMode > 0) && (s_editMode == 0)) {
bool modified = false;
for (uint8_t i = size - 1; i > 0; --i) {
// wipe empty spaces
if (name[i] == ' ') {
name[i] = '\0';
modified = true;
} else if (name[i] != '\0') {
// and stop at the first non empty character
break;
}
}
if (modified) {
storageDirty(isModelMenuDisplayed() ? EE_MODEL : EE_GENERAL);
}
}
}
}
@@ -268,11 +304,12 @@ void drawGVarName(coord_t x, coord_t y, int8_t idx, LcdFlags flags)
lcdDrawText(x, y, s, flags);
}
void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags)
void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags, uint8_t old_editMode)
{
lcdDrawTextAtIndex(INDENT_WIDTH, y, STR_VSRCRAW, idx+1, 0);
if (g_eeGeneral.anaNames[idx][0] || (flags && s_editMode > 0))
editName(x, y, g_eeGeneral.anaNames[idx], LEN_ANA_NAME, event, flags);
editName(x, y, g_eeGeneral.anaNames[idx], LEN_ANA_NAME, event, (flags != 0),
flags, old_editMode);
else
lcdDrawMMM(x, y, flags);
}
+3 -1
View File
@@ -41,6 +41,8 @@ void drawCurve(coord_t offset)
void menuModelCurvesAll(event_t event)
{
uint8_t old_editMode = s_editMode;
#if defined(GVARS_IN_CURVES_SCREEN)
SIMPLE_MENU(STR_MENUCURVES, menuTabModel, MENU_MODEL_CURVES, HEADER_LINE+MAX_CURVES+MAX_GVARS);
#else
@@ -83,7 +85,7 @@ void menuModelCurvesAll(event_t event)
{
drawStringWithIndex(0, y, STR_CV, k+1, attr);
CurveHeader & crv = g_model.curves[k];
editName(4*FW, y, crv.name, sizeof(crv.name), 0, 0);
editName(4*FW, y, crv.name, sizeof(crv.name), 0, 0, 0, old_editMode);
#if LCD_W >= 212
lcdDrawNumber(11*FW, y, 5+crv.points, LEFT);
lcdDrawText(lcdLastRightPos, y, STR_PTS, 0);
+2 -2
View File
@@ -185,7 +185,7 @@ void displayExpoLine(coord_t y, ExpoData * ed)
displayFlightModes(EXPO_LINE_FM_POS, y, ed->flightModes);
if (ed->name[0]) {
lcdDrawSizedText(EXPO_LINE_NAME_POS, y, ed->name, sizeof(ed->name), ZCHAR);
lcdDrawSizedText(EXPO_LINE_NAME_POS, y, ed->name, sizeof(ed->name), 0);
}
#if LCD_DEPTH > 1
@@ -217,7 +217,7 @@ void displayExpoLine(coord_t y, ExpoData * ed)
drawSource(EXPO_LINE_SRC_POS, y, ed->srcRaw, 0);
if (ed->name[0])
lcdDrawSizedText(EXPO_LINE_INFOS_POS, y, ed->name, LEN_EXPOMIX_NAME, ZCHAR);
lcdDrawSizedText(EXPO_LINE_INFOS_POS, y, ed->name, LEN_EXPOMIX_NAME, 0);
else if (!ed->flightModes || ((ed->curve.value || ed->swtch) && ((get_tmr10ms() / 200) & 1)))
displayExpoInfos(y, ed);
else
+5 -5
View File
@@ -166,7 +166,7 @@ void onMixesMenu(const char * result)
void displayHeaderChannelName(uint8_t ch)
{
if (g_model.limitData[ch].name[0] != '\0') {
lcdDrawSizedText(MIX_HDR_GAUGE_POS_X - FWNUM * 5 - 1, 1, g_model.limitData[ch].name, ZLEN(g_model.limitData[ch].name), ZCHAR|SMLSIZE|RIGHT);
lcdDrawSizedText(MIX_HDR_GAUGE_POS_X - FWNUM * 5 - 1, 1, g_model.limitData[ch].name, ZLEN(g_model.limitData[ch].name), SMLSIZE|RIGHT);
}
}
@@ -182,7 +182,7 @@ void displayMixInfos(coord_t y, MixData * md)
void displayMixLine(coord_t y, MixData * md)
{
if (md->name[0])
lcdDrawSizedText(MIX_LINE_NAME_POS, y, md->name, sizeof(md->name), ZCHAR);
lcdDrawSizedText(MIX_LINE_NAME_POS, y, md->name, sizeof(md->name), 0);
if (!md->flightModes || ((md->curve.value || md->swtch) && ((get_tmr10ms() / 200) & 1)))
displayMixInfos(y, md);
else
@@ -208,7 +208,7 @@ void displayHeaderChannelName(uint8_t ch)
{
uint8_t len = zlen(g_model.limitData[ch].name, sizeof(g_model.limitData[ch].name));
if (len) {
lcdDrawSizedText(80, 1, g_model.limitData[ch].name, len, ZCHAR|SMLSIZE);
lcdDrawSizedText(80, 1, g_model.limitData[ch].name, len, SMLSIZE);
}
}
@@ -231,7 +231,7 @@ void displayMixInfos(coord_t y, MixData * md)
void displayMixLine(coord_t y, MixData * md, bool active)
{
if(active && md->name[0]) {
lcdDrawSizedText(FW*sizeof(TR_MIXES)+FW/2, 0, md->name, sizeof(md->name), ZCHAR);
lcdDrawSizedText(FW*sizeof(TR_MIXES)+FW/2, 0, md->name, sizeof(md->name), 0);
if (!md->flightModes || ((md->curve.value || md->swtch) && ((get_tmr10ms() / 200) & 1)))
displayMixInfos(y, md);
else
@@ -239,7 +239,7 @@ void displayMixLine(coord_t y, MixData * md, bool active)
}
else {
if (md->name[0])
lcdDrawSizedText(MIX_LINE_NAME_POS, y, md->name, sizeof(md->name), ZCHAR);
lcdDrawSizedText(MIX_LINE_NAME_POS, y, md->name, sizeof(md->name), 0);
else if (!md->flightModes || ((md->curve.value || md->swtch) && ((get_tmr10ms() / 200) & 1)))
displayMixInfos(y, md);
else
+1 -1
View File
@@ -25,7 +25,7 @@ const char * warningInfoText;
uint8_t warningInfoLength;
uint8_t warningType;
uint8_t warningResult = 0;
uint8_t warningInfoFlags = ZCHAR;
uint8_t warningInfoFlags = 0;
uint8_t popupMenuOffsetType = MENU_OFFSET_INTERNAL;
void (* popupFunc)(event_t event) = nullptr;
+17 -5
View File
@@ -323,6 +323,8 @@ void onFactoryResetConfirm(const char * result)
void menuRadioHardware(event_t event)
{
uint8_t old_editMode = s_editMode;
MENU(STR_HARDWARE, menuTabGeneral, MENU_RADIO_HARDWARE, HEADER_LINE + ITEM_RADIO_HARDWARE_MAX, {
HEADER_LINE_COLUMNS
0 /* calibration button */,
@@ -391,7 +393,9 @@ void menuRadioHardware(event_t event)
case ITEM_RADIO_HARDWARE_STICK2:
case ITEM_RADIO_HARDWARE_STICK3:
case ITEM_RADIO_HARDWARE_STICK4:
editStickHardwareSettings(HW_SETTINGS_COLUMN1, y, k - ITEM_RADIO_HARDWARE_STICK1, event, attr);
editStickHardwareSettings(HW_SETTINGS_COLUMN1, y,
k - ITEM_RADIO_HARDWARE_STICK1, event,
attr, old_editMode);
break;
#if (NUM_POTS + NUM_SLIDERS) > 0
@@ -415,7 +419,9 @@ void menuRadioHardware(event_t event)
uint8_t mask = (0x03 << shift);
lcdDrawTextAtIndex(INDENT_WIDTH, y, STR_VSRCRAW, NUM_STICKS+idx+1, menuHorizontalPosition < 0 ? attr : 0);
if (g_eeGeneral.anaNames[NUM_STICKS+idx][0] || (attr && s_editMode > 0 && menuHorizontalPosition == 0))
editName(HW_SETTINGS_COLUMN1, y, g_eeGeneral.anaNames[NUM_STICKS+idx], LEN_ANA_NAME, event, attr && menuHorizontalPosition == 0);
editName(HW_SETTINGS_COLUMN1, y,
g_eeGeneral.anaNames[NUM_STICKS + idx], LEN_ANA_NAME, event,
attr && menuHorizontalPosition == 0, 0, old_editMode);
else
lcdDrawMMM(HW_SETTINGS_COLUMN1, y, menuHorizontalPosition==0 ? attr : 0);
uint8_t potType = (g_eeGeneral.potsConfig & mask) >> shift;
@@ -436,7 +442,10 @@ void menuRadioHardware(event_t event)
int idx = k - ITEM_RADIO_HARDWARE_SLIDER1;
lcdDrawTextAtIndex(INDENT_WIDTH, y, STR_VSRCRAW, NUM_STICKS+NUM_POTS+idx+1, menuHorizontalPosition < 0 ? attr : 0);
if (ZEXIST(g_eeGeneral.anaNames[NUM_STICKS+NUM_POTS+idx]) || (attr && menuHorizontalPosition == 0 && s_editMode > 0))
editName(HW_SETTINGS_COLUMN1, y, g_eeGeneral.anaNames[NUM_STICKS+NUM_POTS+idx], LEN_ANA_NAME, event, attr && menuHorizontalPosition == 0);
editName(HW_SETTINGS_COLUMN1, y,
g_eeGeneral.anaNames[NUM_STICKS + NUM_POTS + idx],
LEN_ANA_NAME, event, attr && menuHorizontalPosition == 0,
0, old_editMode);
else
lcdDrawMMM(HW_SETTINGS_COLUMN1, y, menuHorizontalPosition == 0 ? attr : 0);
uint8_t mask = (0x01 << idx);
@@ -490,7 +499,9 @@ void menuRadioHardware(event_t event)
int config = SWITCH_CONFIG(index);
lcdDrawTextAtIndex(INDENT_WIDTH, y, STR_VSRCRAW, MIXSRC_FIRST_SWITCH - MIXSRC_Rud + index + 1, menuHorizontalPosition < 0 ? attr : 0);
if (ZEXIST(g_eeGeneral.switchNames[index]) || (attr && s_editMode > 0 && menuHorizontalPosition == 0))
editName(HW_SETTINGS_COLUMN1, y, g_eeGeneral.switchNames[index], LEN_SWITCH_NAME, event, menuHorizontalPosition == 0 ? attr : 0);
editName(HW_SETTINGS_COLUMN1, y, g_eeGeneral.switchNames[index],
LEN_SWITCH_NAME, event,
menuHorizontalPosition == 0 ? attr : 0, 0, old_editMode);
else
lcdDrawMMM(HW_SETTINGS_COLUMN1, y, menuHorizontalPosition == 0 ? attr : 0);
config = editChoice(HW_SETTINGS_COLUMN2, y, "", STR_SWTYPES, config, SWITCH_NONE, SWITCH_TYPE_MAX(index), menuHorizontalPosition == 1 ? attr : 0, event);
@@ -589,7 +600,8 @@ void menuRadioHardware(event_t event)
case ITEM_RADIO_HARDWARE_BLUETOOTH_NAME:
lcdDrawText(INDENT_WIDTH, y, STR_NAME);
editName(HW_SETTINGS_COLUMN2, y, g_eeGeneral.bluetoothName, LEN_BLUETOOTH_NAME, event, attr);
editName(HW_SETTINGS_COLUMN2, y, g_eeGeneral.bluetoothName,
LEN_BLUETOOTH_NAME, event, (attr != 0), attr, old_editMode);
break;
#endif
@@ -313,6 +313,7 @@ void menuRadioSdManager(event_t _event)
#endif
event_t event = (EVT_KEY_MASK(_event) == KEY_ENTER ? 0 : _event);
uint8_t old_editMode = s_editMode;
SIMPLE_MENU(SD_IS_HC() ? STR_SDHC_CARD : STR_SD_CARD, menuTabGeneral, MENU_RADIO_SD_MANAGER, HEADER_LINE + reusableBuffer.sdManager.count);
switch (_event) {
@@ -579,8 +580,13 @@ void menuRadioSdManager(event_t _event)
if (s_editMode == EDIT_MODIFY_STRING && attr) {
uint8_t extlen, efflen;
const char * ext = getFileExtension(reusableBuffer.sdManager.originalName, 0, 0, nullptr, &extlen);
editName(lcdNextPos, y, reusableBuffer.sdManager.lines[i], SD_SCREEN_FILE_LENGTH - extlen, _event, attr, 0);
efflen = effectiveLen(reusableBuffer.sdManager.lines[i], SD_SCREEN_FILE_LENGTH - extlen);
editName(lcdNextPos, y, reusableBuffer.sdManager.lines[i],
SD_SCREEN_FILE_LENGTH - extlen, _event, attr, 0, old_editMode);
efflen = effectiveLen(reusableBuffer.sdManager.lines[i],
SD_SCREEN_FILE_LENGTH - extlen);
if (s_editMode == 0) {
if (ext) {
strAppend(&reusableBuffer.sdManager.lines[i][efflen], ext);