Source popup menu

This commit is contained in:
Andre Bernet
2015-03-23 13:32:43 +04:00
parent 863a30a5ed
commit f59b8f961e
16 changed files with 284 additions and 19 deletions
+119
View File
@@ -42,6 +42,7 @@ horzpos_t m_posHorz;
int8_t s_editMode;
uint8_t s_noHi;
uint8_t calibrationState;
int s_source = MIXSRC_NONE;
#if defined(AUTOSWITCH)
int8_t checkIncDecMovedSwitch(int8_t val)
@@ -70,6 +71,61 @@ INIT_STOPS(stops100, 3, -100, 0, 100)
INIT_STOPS(stops1000, 3, -1000, 0, 1000)
INIT_STOPS(stopsSwitch, 15, SWSRC_FIRST, CATEGORY_END(-SWSRC_FIRST_LOGICAL_SWITCH), CATEGORY_END(-SWSRC_FIRST_TRIM), CATEGORY_END(-SWSRC_LAST_SWITCH+1), 0, CATEGORY_END(SWSRC_LAST_SWITCH), CATEGORY_END(SWSRC_FIRST_TRIM-1), CATEGORY_END(SWSRC_FIRST_LOGICAL_SWITCH-1), SWSRC_LAST)
void onLongEnterPress(const char *result)
{
if (result == STR_MENU_INPUTS) {
for (int i = MIXSRC_FIRST_INPUT; i <= MIXSRC_LAST_INPUT; i++) {
if (isInputAvailable(i)) {
s_source = i;
break;
}
}
}
#if defined(LUA_MODEL_SCRIPTS)
if (result == STR_MENU_LUA) {
for (int i = MIXSRC_FIRST_LUA; i <= MIXSRC_LAST_LUA; i++) {
if (isSourceAvailable(i)) {
s_source = i;
break;
}
}
}
#endif
if (result == STR_MENU_STICKS)
s_source = MIXSRC_FIRST_STICK;
if (result == STR_MENU_POTS)
s_source = MIXSRC_FIRST_POT;
if (result == STR_MENU_MAX)
s_source = MIXSRC_MAX;
if (result == STR_MENU_HELI)
s_source = MIXSRC_FIRST_HELI;
if (result == STR_MENU_TRIMS)
s_source = MIXSRC_FIRST_TRIM;
if (result == STR_MENU_SWITCHES)
s_source = MIXSRC_FIRST_SWITCH;
if (result == STR_MENU_TRAINER)
s_source = MIXSRC_FIRST_TRAINER;
if (result == STR_MENU_CHANNELS) {
for (int i = MIXSRC_FIRST_CH; i <= MIXSRC_LAST_CH; i++) {
if (isSourceAvailable(i)) {
s_source = i;
break;
}
}
}
if (result == STR_MENU_TELEMETRY) {
for (int i = 0; i < TELEM_VALUES_MAX; i++) {
TelemetrySensor * sensor = & g_model.telemetrySensors[i];
if (sensor->isAvailable()) {
s_source = MIXSRC_FIRST_TELEM + 3*i;
break;
}
}
}
}
int checkIncDec(unsigned int event, int val, int i_min, int i_max, unsigned int i_flags, IsValueAvailable isValueAvailable, const CheckIncDecStops &stops)
{
int newval = val;
@@ -207,6 +263,68 @@ int checkIncDec(unsigned int event, int val, int i_min, int i_max, unsigned int
else {
checkIncDec_Ret = 0;
}
if (i_flags & INCDEC_SOURCE) {
if (event == EVT_KEY_LONG(KEY_ENTER)) {
killEvents(event);
s_source = MIXSRC_NONE;
if (i_min <= MIXSRC_FIRST_INPUT && i_max >= MIXSRC_FIRST_INPUT) {
bool available = false;
for (int i = MIXSRC_FIRST_INPUT; i <= MIXSRC_LAST_INPUT; i++) {
if (isInputAvailable(i)) {
available = true;
break;
}
}
if (available)
MENU_ADD_ITEM(STR_MENU_INPUTS);
}
#if defined(LUA_MODEL_SCRIPTS)
if (i_min <= MIXSRC_FIRST_LUA && i_max >= MIXSRC_FIRST_LUA) {
bool available = false;
for (int i = MIXSRC_FIRST_LUA; i <= MIXSRC_LAST_LUA; i++) {
if (isSourceAvailable(i)) {
available = true;
break;
}
}
if (available)
MENU_ADD_ITEM(STR_MENU_LUA);
}
#endif
if (i_min <= MIXSRC_FIRST_STICK && i_max >= MIXSRC_FIRST_STICK) MENU_ADD_ITEM(STR_MENU_STICKS);
if (i_min <= MIXSRC_FIRST_POT && i_max >= MIXSRC_FIRST_POT) MENU_ADD_ITEM(STR_MENU_POTS);
if (i_min <= MIXSRC_MAX && i_max >= MIXSRC_MAX) MENU_ADD_ITEM(STR_MENU_MAX);
#if defined(HELI)
if (i_min <= MIXSRC_FIRST_HELI && i_max >= MIXSRC_FIRST_HELI) MENU_ADD_ITEM(STR_MENU_HELI);
#endif
if (i_min <= MIXSRC_FIRST_TRIM && i_max >= MIXSRC_FIRST_TRIM) MENU_ADD_ITEM(STR_MENU_TRIMS);
if (i_min <= MIXSRC_FIRST_SWITCH && i_max >= MIXSRC_FIRST_SWITCH) MENU_ADD_ITEM(STR_MENU_SWITCHES);
if (i_min <= MIXSRC_FIRST_TRAINER && i_max >= MIXSRC_FIRST_TRAINER) MENU_ADD_ITEM(STR_MENU_TRAINER);
if (i_min <= MIXSRC_FIRST_CH && i_max >= MIXSRC_FIRST_CH) MENU_ADD_ITEM(STR_MENU_CHANNELS);
if (i_min <= MIXSRC_FIRST_TELEM && i_max >= MIXSRC_FIRST_TELEM) {
bool available = false;
for (int i = 0; i < TELEM_VALUES_MAX; i++) {
TelemetrySensor * sensor = & g_model.telemetrySensors[i];
if (sensor->isAvailable()) {
available = true;
break;
}
}
if (available)
MENU_ADD_ITEM(STR_MENU_TELEMETRY);
}
menuHandler = onLongEnterPress;
}
if (s_source != MIXSRC_NONE) {
newval = s_source;
if (s_source != MIXSRC_MAX)
s_editMode = 1;
s_source = MIXSRC_NONE;
}
}
return newval;
}
@@ -229,6 +347,7 @@ void onLongMenuPress(const char *result)
}
}
tmr10ms_t menuEntryTime;
void check(const char *name, check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t rowcount, uint8_t flags)