mirror of
https://github.com/EdgeTX/edgetx.git
synced 2025-07-26 01:35:16 +03:00
Fixes #6721 - Tests needed
This commit is contained in:
parent
11baf9bc1a
commit
465674ca68
4 changed files with 33 additions and 28 deletions
|
@ -23,13 +23,18 @@
|
||||||
#include "opentx.h"
|
#include "opentx.h"
|
||||||
#include "storage/modelslist.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 NODE_TYPE(fname) fname[SD_SCREEN_FILE_LENGTH+1]
|
||||||
#define IS_DIRECTORY(fname) ((bool)(!NODE_TYPE(fname)))
|
#define IS_DIRECTORY(fname) ((bool)(!NODE_TYPE(fname)))
|
||||||
#define IS_FILE(fname) ((bool)(NODE_TYPE(fname)))
|
#define IS_FILE(fname) ((bool)(NODE_TYPE(fname)))
|
||||||
|
|
||||||
int currentBitmapIndex = 0;
|
int currentBitmapIndex = 0;
|
||||||
BitmapBuffer * currentBitmap = NULL;
|
BitmapBuffer * currentBitmap = nullptr;
|
||||||
|
|
||||||
|
inline void REFRESH_FILES()
|
||||||
|
{
|
||||||
|
reusableBuffer.sdManager.offset = 65535;
|
||||||
|
currentBitmapIndex = -1;
|
||||||
|
}
|
||||||
|
|
||||||
bool menuRadioSdManagerInfo(event_t event)
|
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);
|
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);
|
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) {
|
switch(_event) {
|
||||||
case EVT_ENTRY:
|
case EVT_ENTRY:
|
||||||
f_chdir(ROOT_PATH);
|
f_chdir(ROOT_PATH);
|
||||||
|
// no break;
|
||||||
|
|
||||||
|
case EVT_ENTRY_UP:
|
||||||
|
case EVT_REFRESH:
|
||||||
REFRESH_FILES();
|
REFRESH_FILES();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -298,23 +307,19 @@ bool menuRadioSdManager(event_t _event)
|
||||||
FILINFO fno;
|
FILINFO fno;
|
||||||
DIR dir;
|
DIR dir;
|
||||||
|
|
||||||
if (menuVerticalOffset == 0) {
|
if (menuVerticalOffset == reusableBuffer.sdManager.offset + 1) {
|
||||||
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) {
|
|
||||||
memmove(reusableBuffer.sdManager.lines[0], reusableBuffer.sdManager.lines[1], (NUM_BODY_LINES-1)*sizeof(reusableBuffer.sdManager.lines[0]));
|
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);
|
memset(reusableBuffer.sdManager.lines[NUM_BODY_LINES-1], 0xff, SD_SCREEN_FILE_LENGTH);
|
||||||
NODE_TYPE(reusableBuffer.sdManager.lines[NUM_BODY_LINES-1]) = 1;
|
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]));
|
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]));
|
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;
|
reusableBuffer.sdManager.count = 0;
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ bool menuTextView(event_t event)
|
||||||
{
|
{
|
||||||
static int lines_count;
|
static int lines_count;
|
||||||
|
|
||||||
drawMenuTemplate(STR_TEXT_VIEWER, ICON_OPENTX);
|
drawMenuTemplate(STR_TEXT_VIEWER, ICON_OPENTX, nullptr, OPTION_MENU_NO_SCROLLBAR);
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case EVT_ENTRY:
|
case EVT_ENTRY:
|
||||||
|
@ -42,7 +42,7 @@ bool menuTextView(event_t event)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVT_ROTARY_RIGHT:
|
case EVT_ROTARY_RIGHT:
|
||||||
if (menuVerticalOffset+NUM_BODY_LINES >= lines_count)
|
if (menuVerticalOffset + NUM_BODY_LINES >= lines_count)
|
||||||
break;
|
break;
|
||||||
else
|
else
|
||||||
++menuVerticalOffset;
|
++menuVerticalOffset;
|
||||||
|
|
|
@ -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);
|
lcdDrawSolidFilledRect(0, bodyTop, LCD_W, bodyBottom-bodyTop, TEXT_BGCOLOR);
|
||||||
|
|
||||||
// Scrollbar
|
// 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);
|
drawVerticalScrollbar(DEFAULT_SCROLLBAR_X, bodyTop+3, bodyBottom-bodyTop-6, menuVerticalOffset, linesCount, linesDisplayed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,11 +21,15 @@
|
||||||
#include "opentx.h"
|
#include "opentx.h"
|
||||||
#include "io/frsky_firmware_update.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 NODE_TYPE(fname) fname[SD_SCREEN_FILE_LENGTH+1]
|
||||||
#define IS_DIRECTORY(fname) ((bool)(!NODE_TYPE(fname)))
|
#define IS_DIRECTORY(fname) ((bool)(!NODE_TYPE(fname)))
|
||||||
#define IS_FILE(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)
|
void menuRadioSdManagerInfo(event_t event)
|
||||||
{
|
{
|
||||||
SIMPLE_SUBMENU(STR_SD_INFO_TITLE, 1);
|
SIMPLE_SUBMENU(STR_SD_INFO_TITLE, 1);
|
||||||
|
@ -288,7 +292,7 @@ void menuRadioSdManager(event_t _event)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVT_ENTRY_UP:
|
case EVT_ENTRY_UP:
|
||||||
menuVerticalOffset = reusableBuffer.sdManager.offset;
|
REFRESH_FILES();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(PCBX9) || defined(RADIO_X7) // TODO NO_MENU_KEY
|
#if defined(PCBX9) || defined(RADIO_X7) // TODO NO_MENU_KEY
|
||||||
|
@ -421,23 +425,19 @@ void menuRadioSdManager(event_t _event)
|
||||||
FILINFO fno;
|
FILINFO fno;
|
||||||
DIR dir;
|
DIR dir;
|
||||||
|
|
||||||
if (menuVerticalOffset == 0) {
|
if (menuVerticalOffset == reusableBuffer.sdManager.offset + 1) {
|
||||||
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) {
|
|
||||||
memmove(reusableBuffer.sdManager.lines[0], reusableBuffer.sdManager.lines[1], (NUM_BODY_LINES-1)*sizeof(reusableBuffer.sdManager.lines[0]));
|
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);
|
memset(reusableBuffer.sdManager.lines[NUM_BODY_LINES-1], 0xff, SD_SCREEN_FILE_LENGTH);
|
||||||
NODE_TYPE(reusableBuffer.sdManager.lines[NUM_BODY_LINES-1]) = 1;
|
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]));
|
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]));
|
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;
|
reusableBuffer.sdManager.count = 0;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue