diff --git a/radio/src/gui/480x272/radio_sdmanager.cpp b/radio/src/gui/480x272/radio_sdmanager.cpp index 2fe3aba41..efcdee227 100644 --- a/radio/src/gui/480x272/radio_sdmanager.cpp +++ b/radio/src/gui/480x272/radio_sdmanager.cpp @@ -23,13 +23,18 @@ #include "opentx.h" #include "storage/modelslist.h" -#define REFRESH_FILES() do { reusableBuffer.sdManager.offset = 65535; currentBitmapIndex = -1; } while (0) #define NODE_TYPE(fname) fname[SD_SCREEN_FILE_LENGTH+1] #define IS_DIRECTORY(fname) ((bool)(!NODE_TYPE(fname))) #define IS_FILE(fname) ((bool)(NODE_TYPE(fname))) int currentBitmapIndex = 0; -BitmapBuffer * currentBitmap = NULL; +BitmapBuffer * currentBitmap = nullptr; + +inline void REFRESH_FILES() +{ + reusableBuffer.sdManager.offset = 65535; + currentBitmapIndex = -1; +} bool menuRadioSdManagerInfo(event_t event) { @@ -181,11 +186,15 @@ bool menuRadioSdManager(event_t _event) event_t event = (EVT_KEY_MASK(_event) == KEY_ENTER ? 0 : _event); SIMPLE_MENU(SD_IS_HC() ? STR_SDHC_CARD : STR_SD_CARD, RADIO_ICONS, menuTabGeneral, MENU_RADIO_SD_MANAGER, reusableBuffer.sdManager.count); - int index = menuVerticalPosition-menuVerticalOffset; + int index = menuVerticalPosition - menuVerticalOffset; switch(_event) { case EVT_ENTRY: f_chdir(ROOT_PATH); + // no break; + + case EVT_ENTRY_UP: + case EVT_REFRESH: REFRESH_FILES(); break; @@ -298,23 +307,19 @@ bool menuRadioSdManager(event_t _event) FILINFO fno; DIR dir; - if (menuVerticalOffset == 0) { - reusableBuffer.sdManager.offset = 0; - memset(reusableBuffer.sdManager.lines, 0, sizeof(reusableBuffer.sdManager.lines)); - } - else if (menuVerticalOffset == reusableBuffer.sdManager.count-NUM_BODY_LINES) { - reusableBuffer.sdManager.offset = menuVerticalOffset; - memset(reusableBuffer.sdManager.lines, 0, sizeof(reusableBuffer.sdManager.lines)); - } - else if (menuVerticalOffset > reusableBuffer.sdManager.offset) { + if (menuVerticalOffset == reusableBuffer.sdManager.offset + 1) { memmove(reusableBuffer.sdManager.lines[0], reusableBuffer.sdManager.lines[1], (NUM_BODY_LINES-1)*sizeof(reusableBuffer.sdManager.lines[0])); memset(reusableBuffer.sdManager.lines[NUM_BODY_LINES-1], 0xff, SD_SCREEN_FILE_LENGTH); NODE_TYPE(reusableBuffer.sdManager.lines[NUM_BODY_LINES-1]) = 1; } - else { + else if (menuVerticalOffset == reusableBuffer.sdManager.offset - 1) { memmove(reusableBuffer.sdManager.lines[1], reusableBuffer.sdManager.lines[0], (NUM_BODY_LINES-1)*sizeof(reusableBuffer.sdManager.lines[0])); memset(reusableBuffer.sdManager.lines[0], 0, sizeof(reusableBuffer.sdManager.lines[0])); } + else { + reusableBuffer.sdManager.offset = menuVerticalOffset; + memset(reusableBuffer.sdManager.lines, 0, sizeof(reusableBuffer.sdManager.lines)); + } reusableBuffer.sdManager.count = 0; diff --git a/radio/src/gui/480x272/view_text.cpp b/radio/src/gui/480x272/view_text.cpp index b4aee0f8e..6afd7534c 100644 --- a/radio/src/gui/480x272/view_text.cpp +++ b/radio/src/gui/480x272/view_text.cpp @@ -24,7 +24,7 @@ bool menuTextView(event_t event) { static int lines_count; - drawMenuTemplate(STR_TEXT_VIEWER, ICON_OPENTX); + drawMenuTemplate(STR_TEXT_VIEWER, ICON_OPENTX, nullptr, OPTION_MENU_NO_SCROLLBAR); switch (event) { case EVT_ENTRY: @@ -42,7 +42,7 @@ bool menuTextView(event_t event) break; case EVT_ROTARY_RIGHT: - if (menuVerticalOffset+NUM_BODY_LINES >= lines_count) + if (menuVerticalOffset + NUM_BODY_LINES >= lines_count) break; else ++menuVerticalOffset; diff --git a/radio/src/gui/480x272/widgets.cpp b/radio/src/gui/480x272/widgets.cpp index 0e1dd5416..e33a09904 100644 --- a/radio/src/gui/480x272/widgets.cpp +++ b/radio/src/gui/480x272/widgets.cpp @@ -177,7 +177,7 @@ void drawMenuTemplate(const char * title, uint8_t icon, const uint8_t * icons, u lcdDrawSolidFilledRect(0, bodyTop, LCD_W, bodyBottom-bodyTop, TEXT_BGCOLOR); // Scrollbar - if (!(options & OPTION_MENU_NO_SCROLLBAR) && linesCount>linesDisplayed) { + if (!(options & OPTION_MENU_NO_SCROLLBAR) && linesCount > linesDisplayed) { drawVerticalScrollbar(DEFAULT_SCROLLBAR_X, bodyTop+3, bodyBottom-bodyTop-6, menuVerticalOffset, linesCount, linesDisplayed); } } diff --git a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp index 6b7fc5e3a..797717314 100644 --- a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp +++ b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp @@ -21,11 +21,15 @@ #include "opentx.h" #include "io/frsky_firmware_update.h" -#define REFRESH_FILES() do { reusableBuffer.sdManager.offset = 65535; menuVerticalPosition = 0; } while(0) #define NODE_TYPE(fname) fname[SD_SCREEN_FILE_LENGTH+1] #define IS_DIRECTORY(fname) ((bool)(!NODE_TYPE(fname))) #define IS_FILE(fname) ((bool)(NODE_TYPE(fname))) +inline void REFRESH_FILES() +{ + reusableBuffer.sdManager.offset = 65535; +} + void menuRadioSdManagerInfo(event_t event) { SIMPLE_SUBMENU(STR_SD_INFO_TITLE, 1); @@ -288,7 +292,7 @@ void menuRadioSdManager(event_t _event) break; case EVT_ENTRY_UP: - menuVerticalOffset = reusableBuffer.sdManager.offset; + REFRESH_FILES(); break; #if defined(PCBX9) || defined(RADIO_X7) // TODO NO_MENU_KEY @@ -421,23 +425,19 @@ void menuRadioSdManager(event_t _event) FILINFO fno; DIR dir; - if (menuVerticalOffset == 0) { - reusableBuffer.sdManager.offset = 0; - memset(reusableBuffer.sdManager.lines, 0, sizeof(reusableBuffer.sdManager.lines)); - } - else if (menuVerticalOffset == reusableBuffer.sdManager.count-NUM_BODY_LINES) { - reusableBuffer.sdManager.offset = menuVerticalOffset; - memset(reusableBuffer.sdManager.lines, 0, sizeof(reusableBuffer.sdManager.lines)); - } - else if (menuVerticalOffset > reusableBuffer.sdManager.offset) { + if (menuVerticalOffset == reusableBuffer.sdManager.offset + 1) { memmove(reusableBuffer.sdManager.lines[0], reusableBuffer.sdManager.lines[1], (NUM_BODY_LINES-1)*sizeof(reusableBuffer.sdManager.lines[0])); memset(reusableBuffer.sdManager.lines[NUM_BODY_LINES-1], 0xff, SD_SCREEN_FILE_LENGTH); NODE_TYPE(reusableBuffer.sdManager.lines[NUM_BODY_LINES-1]) = 1; } - else { + else if (menuVerticalOffset == reusableBuffer.sdManager.offset - 1) { memmove(reusableBuffer.sdManager.lines[1], reusableBuffer.sdManager.lines[0], (NUM_BODY_LINES-1)*sizeof(reusableBuffer.sdManager.lines[0])); memset(reusableBuffer.sdManager.lines[0], 0, sizeof(reusableBuffer.sdManager.lines[0])); } + else { + reusableBuffer.sdManager.offset = menuVerticalOffset; + memset(reusableBuffer.sdManager.lines, 0, sizeof(reusableBuffer.sdManager.lines)); + } reusableBuffer.sdManager.count = 0;