fix(color): UI freeze when setting up 'Set' special function with no timers configured (#6377)
This commit is contained in:
@@ -267,9 +267,15 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||
}
|
||||
#endif // GVARS
|
||||
else if (func == FUNC_SET_TIMER) {
|
||||
maxParam = MAX_TIMERS - 1;
|
||||
lcdDrawTextAtIndex(lcdNextPos, y, STR_VFSWRESET, CFN_TIMER_INDEX(cfn), attr);
|
||||
if (active) CFN_TIMER_INDEX(cfn) = checkIncDec(event, CFN_TIMER_INDEX(cfn), 0, maxParam, eeFlags, isTimerSourceAvailable);
|
||||
if (timersSetupCount()> 0) {
|
||||
maxParam = MAX_TIMERS - 1;
|
||||
lcdDrawTextAtIndex(lcdNextPos, y, STR_VFSWRESET, CFN_TIMER_INDEX(cfn), attr);
|
||||
if (active) CFN_TIMER_INDEX(cfn) = checkIncDec(event, CFN_TIMER_INDEX(cfn), 0, maxParam, eeFlags, isTimerSourceAvailable);
|
||||
} else {
|
||||
lcdDrawText(lcdNextPos + FW, y, STR_NO_TIMERS, 0);
|
||||
if (attr)
|
||||
repeatLastCursorHorMove(event);
|
||||
}
|
||||
break;
|
||||
}
|
||||
#if defined(FUNCTION_SWITCHES)
|
||||
@@ -317,8 +323,12 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||
}
|
||||
#endif
|
||||
else if (func == FUNC_SET_TIMER) {
|
||||
getMixSrcRange(MIXSRC_FIRST_TIMER, val_min, val_max);
|
||||
drawTimer(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT, attr);
|
||||
if (timersSetupCount() > 0) {
|
||||
getMixSrcRange(MIXSRC_FIRST_TIMER, val_min, val_max);
|
||||
drawTimer(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT, attr);
|
||||
} else if (attr) {
|
||||
repeatLastCursorHorMove(event);
|
||||
}
|
||||
}
|
||||
#if defined(AUDIO)
|
||||
else if (func == FUNC_PLAY_SOUND) {
|
||||
|
||||
@@ -256,9 +256,15 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||
}
|
||||
#endif
|
||||
else if (func == FUNC_SET_TIMER) {
|
||||
maxParam = TIMERS-1;
|
||||
drawStringWithIndex(lcdNextPos, y, STR_TIMER, CFN_TIMER_INDEX(cfn)+1, attr);
|
||||
if (active) CFN_TIMER_INDEX(cfn) = checkIncDec(event, CFN_TIMER_INDEX(cfn), 0, maxParam, eeFlags, isTimerSourceAvailable);
|
||||
if (timersSetupCount()> 0) {
|
||||
maxParam = TIMERS-1;
|
||||
drawStringWithIndex(lcdNextPos, y, STR_TIMER, CFN_TIMER_INDEX(cfn)+1, attr);
|
||||
if (active) CFN_TIMER_INDEX(cfn) = checkIncDec(event, CFN_TIMER_INDEX(cfn), 0, maxParam, eeFlags, isTimerSourceAvailable);
|
||||
} else {
|
||||
lcdDrawText(lcdNextPos + FW, y, STR_NO_TIMERS, 0);
|
||||
if (attr)
|
||||
repeatLastCursorHorMove(event);
|
||||
}
|
||||
break;
|
||||
}
|
||||
else if (attr) {
|
||||
@@ -300,8 +306,12 @@ void menuSpecialFunctions(event_t event, CustomFunctionData * functions, CustomF
|
||||
}
|
||||
#endif
|
||||
else if (func == FUNC_SET_TIMER) {
|
||||
getMixSrcRange(MIXSRC_FIRST_TIMER, val_min, val_max);
|
||||
drawTimer(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT|TIMEHOUR, attr);
|
||||
if (timersSetupCount() > 0) {
|
||||
getMixSrcRange(MIXSRC_FIRST_TIMER, val_min, val_max);
|
||||
drawTimer(MODEL_SPECIAL_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT|TIMEHOUR, attr);
|
||||
} else if (attr) {
|
||||
repeatLastCursorHorMove(event);
|
||||
}
|
||||
}
|
||||
else if (func == FUNC_PLAY_SOUND) {
|
||||
val_max = AU_SPECIAL_SOUND_LAST-AU_SPECIAL_SOUND_FIRST-1;
|
||||
|
||||
@@ -200,9 +200,13 @@ void FunctionLineButton::refresh()
|
||||
break;
|
||||
|
||||
case FUNC_SET_TIMER:
|
||||
sprintf(s + strlen(s), "%s%d = %s", STR_SRC_TIMER,
|
||||
CFN_TIMER_INDEX(cfn) + 1,
|
||||
getTimerString(CFN_PARAM(cfn), {.options = SHOW_TIME}));
|
||||
if (isTimerSourceAvailable(CFN_TIMER_INDEX(cfn))) {
|
||||
sprintf(s + strlen(s), "%s%d = %s", STR_SRC_TIMER,
|
||||
CFN_TIMER_INDEX(cfn) + 1,
|
||||
getTimerString(CFN_PARAM(cfn), {.options = SHOW_TIME}));
|
||||
} else {
|
||||
sprintf(s + strlen(s), "---");
|
||||
}
|
||||
break;
|
||||
|
||||
case FUNC_SET_FAILSAFE:
|
||||
@@ -464,18 +468,22 @@ void FunctionEditPage::updateSpecialFunctionOneWindow()
|
||||
|
||||
case FUNC_SET_TIMER: {
|
||||
new StaticText(line, rect_t{}, STR_TIMER);
|
||||
auto timerchoice = new Choice(line, rect_t{}, 0, TIMERS - 1,
|
||||
GET_SET_DEFAULT(CFN_TIMER_INDEX(cfn)));
|
||||
timerchoice->setTextHandler([](int32_t value) {
|
||||
return std::string(STR_TIMER) + std::to_string(value + 1);
|
||||
});
|
||||
timerchoice->setAvailableHandler(
|
||||
[=](int value) { return isTimerSourceAvailable(value); });
|
||||
if (timersSetupCount() > 0) {
|
||||
auto timerchoice = new Choice(line, rect_t{}, 0, TIMERS - 1,
|
||||
GET_SET_DEFAULT(CFN_TIMER_INDEX(cfn)));
|
||||
timerchoice->setTextHandler([](int32_t value) {
|
||||
return std::string(STR_TIMER) + std::to_string(value + 1);
|
||||
});
|
||||
timerchoice->setAvailableHandler(
|
||||
[=](int value) { return isTimerSourceAvailable(value); });
|
||||
|
||||
line = specialFunctionOneWindow->newLine(grid);
|
||||
new StaticText(line, rect_t{}, STR_VALUE);
|
||||
new TimeEdit(line, rect_t{}, 0, 9 * 60 * 60 - 1,
|
||||
GET_SET_DEFAULT(CFN_PARAM(cfn)));
|
||||
line = specialFunctionOneWindow->newLine(grid);
|
||||
new StaticText(line, rect_t{}, STR_VALUE);
|
||||
new TimeEdit(line, rect_t{}, 0, 9 * 60 * 60 - 1,
|
||||
GET_SET_DEFAULT(CFN_PARAM(cfn)));
|
||||
} else {
|
||||
new StaticText(line, rect_t{}, STR_NO_TIMERS);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -693,6 +693,15 @@ bool isAssignableFunctionAvailable(int function)
|
||||
}
|
||||
#endif
|
||||
|
||||
int timersSetupCount()
|
||||
{
|
||||
int tc = 0;
|
||||
for (int i = 0; i < MAX_TIMERS; i += 1)
|
||||
if (isTimerSourceAvailable(i))
|
||||
tc += 1;
|
||||
return tc;
|
||||
}
|
||||
|
||||
bool isTimerSourceAvailable(int index)
|
||||
{
|
||||
TimerData *timer = &g_model.timers[index];
|
||||
|
||||
@@ -61,6 +61,7 @@ bool isThrottleSourceAvailable(int source);
|
||||
bool isLogicalSwitchAvailable(int index);
|
||||
bool isAssignableFunctionAvailable(int function);
|
||||
bool isSourceAvailable(int source);
|
||||
int timersSetupCount();
|
||||
bool isTimerSourceAvailable(int source);
|
||||
bool isSourceAvailableInGlobalFunctions(int source);
|
||||
bool isSourceAvailableInCustomSwitches(int source);
|
||||
|
||||
@@ -152,6 +152,7 @@ const char STR_NAME[] = TR_NAME;
|
||||
const char STR_BITMAP[] = TR_BITMAP;
|
||||
const char STR_NO_PICTURE[] = TR_NO_PICTURE;
|
||||
const char STR_TIMER[] = TR_TIMER;
|
||||
const char STR_NO_TIMERS[] = TR_NO_TIMERS;
|
||||
const char STR_START[] = TR_START;
|
||||
const char STR_ELIMITS[] = TR_ELIMITS;
|
||||
const char STR_ETRIMS[] = TR_ETRIMS;
|
||||
|
||||
@@ -276,6 +276,7 @@ extern const char STR_NAME[];
|
||||
extern const char STR_BITMAP[];
|
||||
extern const char STR_NO_PICTURE[];
|
||||
extern const char STR_TIMER[];
|
||||
extern const char STR_NO_TIMERS[];
|
||||
extern const char STR_START[];
|
||||
extern const char STR_ELIMITS[];
|
||||
extern const char STR_ETRIMS[];
|
||||
|
||||
@@ -268,6 +268,7 @@
|
||||
#define TR_BITMAP "模型图片"
|
||||
#define TR_NO_PICTURE "无图片"
|
||||
#define TR_TIMER TR("计时器", "计时器 ")
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "开始"
|
||||
#define TR_ELIMITS TR("扩展行程", "扩展通道行程")
|
||||
#define TR_ETRIMS TR("扩展微调", "扩展微调量")
|
||||
|
||||
@@ -281,6 +281,7 @@
|
||||
#define TR_BITMAP "Obrázek"
|
||||
#define TR_NO_PICTURE "Bez obrázku"
|
||||
#define TR_TIMER "Stopky"
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "Start"
|
||||
#define TR_ELIMITS TR("Limit +25%", "Kanál +/- 125%")
|
||||
#define TR_ETRIMS TR("širší Trim", "Široký trim")
|
||||
|
||||
@@ -274,6 +274,7 @@
|
||||
#define TR_BITMAP "Model billede"
|
||||
#define TR_NO_PICTURE "Ingen billede"
|
||||
#define TR_TIMER TR("Tid", "Tid ")
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "Start"
|
||||
#define TR_ELIMITS TR("Udv.Grænser", "Udvidet grænser")
|
||||
#define TR_ETRIMS TR("Udv.Trim", "Udvidet trim")
|
||||
|
||||
@@ -271,6 +271,7 @@
|
||||
#define TR_BITMAP "Model image"
|
||||
#define TR_NO_PICTURE "No Picture"
|
||||
#define TR_TIMER TR("Timer", "Timer ")
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "Start"
|
||||
#define TR_ELIMITS TR("E.Limits", "Extended limits")
|
||||
#define TR_ETRIMS TR("E.Trims", "Extended trims")
|
||||
|
||||
@@ -269,6 +269,7 @@
|
||||
#define TR_BITMAP "Imagen modelo"
|
||||
#define TR_NO_PICTURE "No Picture"
|
||||
#define TR_TIMER TR("Timer", "Timer ")
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "Start"
|
||||
#define TR_ELIMITS TR("E.Límite", "Ampliar límites")
|
||||
#define TR_ETRIMS TR("E.Trims", "Ampliar trims")
|
||||
|
||||
@@ -282,6 +282,7 @@
|
||||
#define TR_BITMAP "Model Image"
|
||||
#define TR_NO_PICTURE "No Picture"
|
||||
#define TR_TIMER "Timer"
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "Start"
|
||||
#define TR_ELIMITS TR("E.Limits", "Extended Limits")
|
||||
#define TR_ETRIMS TR("E.Trims", "Extended Trims")
|
||||
|
||||
@@ -277,6 +277,7 @@
|
||||
#define TR_BITMAP "Image Modèle"
|
||||
#define TR_NO_PICTURE "Pas d'image"
|
||||
#define TR_TIMER "Chrono "
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "Start"
|
||||
#define TR_ELIMITS TR("Limites ét.", "Limites étendues")
|
||||
#define TR_ETRIMS TR("Trims ét.", "Trims étendus")
|
||||
|
||||
@@ -275,6 +275,7 @@
|
||||
#define TR_BITMAP "תמונה מודל"
|
||||
#define TR_NO_PICTURE "אין תמונה"
|
||||
#define TR_TIMER TR("שעון", "שעון ")
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "התחלה"
|
||||
#define TR_ELIMITS TR("E.Limits", "הרחב תצוגות")
|
||||
#define TR_ETRIMS TR("E.Trims", "הרחב תצוגות")
|
||||
|
||||
@@ -271,6 +271,7 @@
|
||||
#define TR_BITMAP "Immagine"
|
||||
#define TR_NO_PICTURE "No immagine"
|
||||
#define TR_TIMER TR("Timer", "Timer ")
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "Partenza"
|
||||
#define TR_ELIMITS TR("Lim. Est.", "Limiti Estesi")
|
||||
#define TR_ETRIMS TR("Trim Est.", "Trim Estesi")
|
||||
|
||||
@@ -270,6 +270,7 @@
|
||||
#define TR_BITMAP "モデルイメージ"
|
||||
#define TR_NO_PICTURE "画像なし"
|
||||
#define TR_TIMER TR("タイマー", "タイマー ")
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "スタート"
|
||||
#define TR_ELIMITS TR("E.Limit", "リミット拡張")
|
||||
#define TR_ETRIMS TR("E.Trims", "トリム拡張")
|
||||
|
||||
+1017
-1016
File diff suppressed because it is too large
Load Diff
@@ -268,6 +268,7 @@
|
||||
#define TR_BITMAP "Modelafbeelding"
|
||||
#define TR_NO_PICTURE "No Picture"
|
||||
#define TR_TIMER TR("Timer", "Timer ")
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "Start"
|
||||
#define TR_ELIMITS TR("E.Limits", "Extended Limits")
|
||||
#define TR_ETRIMS TR("E.Trims", "Extended Trims")
|
||||
|
||||
@@ -268,6 +268,7 @@
|
||||
#define TR_BITMAP "Obrazek"
|
||||
#define TR_NO_PICTURE "Bez obrazka"
|
||||
#define TR_TIMER TR("Timer", "Timer ")
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "Start"
|
||||
#define TR_ELIMITS TR("Limi+25%", "Kanał +/- 125% ")
|
||||
#define TR_ETRIMS TR("E.Trym ", "Poszer Trymery")
|
||||
|
||||
@@ -274,6 +274,7 @@
|
||||
#define TR_BITMAP "Img modelo"
|
||||
#define TR_NO_PICTURE "Sem foto"
|
||||
#define TR_TIMER "Crono"
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "Iniciar"
|
||||
#define TR_ELIMITS TR("E.Limites", "Limites extend.")
|
||||
#define TR_ETRIMS TR("E.Trims", "Trims extend.")
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
#define TR_BITMAP "Изображ"
|
||||
#define TR_NO_PICTURE "Без изображ"
|
||||
#define TR_TIMER TR("Таймер", "Таймер ")
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "Старт"
|
||||
#define TR_ELIMITS TR("расш лимит", "Расш лимит")
|
||||
#define TR_ETRIMS TR("Расш трим", "Расш тримы")
|
||||
|
||||
@@ -283,6 +283,7 @@
|
||||
#define TR_NO_PICTURE "Ingen bild"
|
||||
#define TR_BITMAP "Modellikon"
|
||||
#define TR_TIMER TR("Timer","Timer ")
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "Start"
|
||||
#define TR_ELIMITS TR("Gränser++","Utökade gränser")
|
||||
#define TR_ETRIMS TR("Trimmar++","Utökade trimmar")
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
#define TR_BITMAP "模型圖片"
|
||||
#define TR_NO_PICTURE "無圖片"
|
||||
#define TR_TIMER TR("計時器", "計時器 ")
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "開始"
|
||||
#define TR_ELIMITS TR("擴展行程", "擴展通道行程")
|
||||
#define TR_ETRIMS TR("擴展微調", "擴展微調量")
|
||||
|
||||
@@ -273,6 +273,7 @@
|
||||
#define TR_BITMAP "Зображ. моделі"
|
||||
#define TR_NO_PICTURE "Немає зображ."
|
||||
#define TR_TIMER TR("Таймер", "Таймер ")
|
||||
#define TR_NO_TIMERS "No timers"
|
||||
#define TR_START "Start" /* use english */
|
||||
#define TR_ELIMITS TR("Розш.Ліміт", "Розширені Ліміти")
|
||||
#define TR_ETRIMS TR("Розш.Трим.", "Розширене Обрізання") /* ned to be clarified by context */
|
||||
|
||||
Reference in New Issue
Block a user