From 372f6e6d7b1799413096971b247f154ddffad476 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Mon, 23 Mar 2015 14:01:26 +0400 Subject: [PATCH] Refactoring --- radio/src/gui/Taranis/helpers.cpp | 11 +++++++ radio/src/gui/Taranis/menus.h | 1 + radio/src/gui/Taranis/navigation.cpp | 49 +++++----------------------- 3 files changed, 20 insertions(+), 41 deletions(-) diff --git a/radio/src/gui/Taranis/helpers.cpp b/radio/src/gui/Taranis/helpers.cpp index ac1037337..9e772d379 100755 --- a/radio/src/gui/Taranis/helpers.cpp +++ b/radio/src/gui/Taranis/helpers.cpp @@ -347,3 +347,14 @@ bool modelHasNotes() return isFileAvailable(filename); } +int getFirstAvailableSource(int min, int max, bool (*func)(int)) +{ + int retval = MIXSRC_NONE; + for (int i = min; i <= max; i++) { + if ((*func)(i)) { + retval = i; + break; + } + } + return retval; +} diff --git a/radio/src/gui/Taranis/menus.h b/radio/src/gui/Taranis/menus.h index 34cf838d0..ddb639f46 100755 --- a/radio/src/gui/Taranis/menus.h +++ b/radio/src/gui/Taranis/menus.h @@ -202,6 +202,7 @@ bool isSwitchAvailableInCustomFunctions(int swtch); bool isSwitchAvailableInMixes(int swtch); bool isSwitchAvailableInTimers(int swtch); bool isModuleAvailable(int module); +int getFirstAvailableSource(int min, int max, bool (*func)(int)); #define AUTOSWITCH_ENTER_LONG() (attr && event==EVT_KEY_LONG(KEY_ENTER)) #define CHECK_INCDEC_SWITCH(event, var, min, max, flags, available) \ var = checkIncDec(event, var, min, max, (flags)|INCDEC_SWITCH, available) diff --git a/radio/src/gui/Taranis/navigation.cpp b/radio/src/gui/Taranis/navigation.cpp index 93d4d0e78..3a1076d4b 100755 --- a/radio/src/gui/Taranis/navigation.cpp +++ b/radio/src/gui/Taranis/navigation.cpp @@ -73,23 +73,11 @@ INIT_STOPS(stopsSwitch, 15, SWSRC_FIRST, CATEGORY_END(-SWSRC_FIRST_LOGICAL_SWITC 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 (result == STR_MENU_INPUTS) + s_source = getFirstAvailableSource(MIXSRC_FIRST_INPUT, MIXSRC_LAST_INPUT, isInputAvailable)+1; #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; - } - } - } + if (result == STR_MENU_LUA) + s_source = getFirstAvailableSource(MIXSRC_FIRST_LUA, MIXSRC_LAST_LUA, isSourceAvailable); #endif if (result == STR_MENU_STICKS) s_source = MIXSRC_FIRST_STICK; @@ -105,15 +93,8 @@ void onLongEnterPress(const char *result) 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_CHANNELS) + s_source = getFirstAvailableSource(MIXSRC_FIRST_CH, MIXSRC_LAST_CH, isSourceAvailable); if (result == STR_MENU_TELEMETRY) { for (int i = 0; i < TELEM_VALUES_MAX; i++) { @@ -270,26 +251,12 @@ int checkIncDec(unsigned int event, int val, int i_min, int i_max, unsigned int 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) + if (getFirstAvailableSource(MIXSRC_FIRST_INPUT, MIXSRC_LAST_INPUT, isInputAvailable) != MIXSRC_NONE) 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) + if (getFirstAvailableSource(MIXSRC_FIRST_LUA, MIXSRC_LAST_LUA, isSourceAvailable) != MIXSRC_NONE) MENU_ADD_ITEM(STR_MENU_LUA); } #endif