mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-11-01 10:21:59 +00:00
fix(ui-new): a tool opened from Home's Tools page goes back to Home
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -44,7 +44,7 @@ public:
|
|||||||
bool handleInput(char c) override {
|
bool handleInput(char c) override {
|
||||||
if (c == KEY_CANCEL) {
|
if (c == KEY_CANCEL) {
|
||||||
_task->savePrefsIfDirty(_dirty);
|
_task->savePrefsIfDirty(_dirty);
|
||||||
_task->gotoToolsScreen();
|
_task->leaveTool();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
bool right = keyIsNext(c) || c == KEY_ENTER;
|
bool right = keyIsNext(c) || c == KEY_ENTER;
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ public:
|
|||||||
|
|
||||||
if (cancel) {
|
if (cancel) {
|
||||||
_task->savePrefsIfDirty(_dirty);
|
_task->savePrefsIfDirty(_dirty);
|
||||||
_task->gotoToolsScreen();
|
_task->leaveTool();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (keyIsPrev(c)) { _tab = (_tab + botcfg::TAB_COUNT - 1) % botcfg::TAB_COUNT; _sel = _scroll = 0; return true; }
|
if (keyIsPrev(c)) { _tab = (_tab + botcfg::TAB_COUNT - 1) % botcfg::TAB_COUNT; _sel = _scroll = 0; return true; }
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool handleInput(char c) override {
|
bool handleInput(char c) override {
|
||||||
if (c == KEY_CANCEL) { _task->gotoToolsScreen(); return true; }
|
if (c == KEY_CANCEL) { _task->leaveTool(); return true; }
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool handleInput(char c) override {
|
bool handleInput(char c) override {
|
||||||
if (c == KEY_CANCEL) { _task->gotoToolsScreen(); return true; }
|
if (c == KEY_CANCEL) { _task->leaveTool(); return true; }
|
||||||
if (c == KEY_UP) { _sel = (_sel > 0) ? _sel - 1 : _item_count - 1; return true; }
|
if (c == KEY_UP) { _sel = (_sel > 0) ? _sel - 1 : _item_count - 1; return true; }
|
||||||
if (c == KEY_DOWN) { _sel = (_sel < _item_count - 1) ? _sel + 1 : 0; return true; }
|
if (c == KEY_DOWN) { _sel = (_sel < _item_count - 1) ? _sel + 1 : 0; return true; }
|
||||||
if (!_prefs) return false;
|
if (!_prefs) return false;
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ public:
|
|||||||
bool handleInput(char c) override {
|
bool handleInput(char c) override {
|
||||||
if (c == KEY_CANCEL) {
|
if (c == KEY_CANCEL) {
|
||||||
_task->savePrefsIfDirty(_dirty);
|
_task->savePrefsIfDirty(_dirty);
|
||||||
_task->gotoToolsScreen();
|
_task->leaveTool();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (c == KEY_UP) { moveSel(-1); return true; }
|
if (c == KEY_UP) { moveSel(-1); return true; }
|
||||||
|
|||||||
@@ -298,7 +298,7 @@ public:
|
|||||||
}
|
}
|
||||||
if (c == KEY_CANCEL) {
|
if (c == KEY_CANCEL) {
|
||||||
_task->savePrefsIfDirty(_dirty); // engine re-seeded per edit
|
_task->savePrefsIfDirty(_dirty); // engine re-seeded per edit
|
||||||
_task->gotoToolsScreen();
|
_task->leaveTool();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (c == KEY_UP) { moveSel(-1); return true; }
|
if (c == KEY_UP) { moveSel(-1); return true; }
|
||||||
|
|||||||
@@ -825,9 +825,9 @@ public:
|
|||||||
|
|
||||||
// ── list view ───────────────────────────────────────────────────────────
|
// ── list view ───────────────────────────────────────────────────────────
|
||||||
if (c == KEY_CANCEL) {
|
if (c == KEY_CANCEL) {
|
||||||
if (_pick_admin_target) { _pick_admin_target = false; _task->gotoToolsScreen(); return true; }
|
if (_pick_admin_target) { _pick_admin_target = false; _task->leaveTool(); return true; }
|
||||||
if (_source == SRC_SCAN) leaveScan();
|
if (_source == SRC_SCAN) leaveScan();
|
||||||
else _task->gotoToolsScreen();
|
else _task->leaveTool();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (c == KEY_CONTEXT_MENU) { openActionMenu(); return true; }
|
if (c == KEY_CONTEXT_MENU) { openActionMenu(); return true; }
|
||||||
|
|||||||
@@ -240,7 +240,7 @@ public:
|
|||||||
|
|
||||||
if (c == KEY_CANCEL) {
|
if (c == KEY_CANCEL) {
|
||||||
_task->savePrefsIfDirty(_dirty);
|
_task->savePrefsIfDirty(_dirty);
|
||||||
_task->gotoToolsScreen();
|
_task->leaveTool();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (c == KEY_UP) { _sel = (_sel > 0) ? _sel - 1 : _item_count - 1; return true; }
|
if (c == KEY_UP) { _sel = (_sel > 0) ? _sel - 1 : _item_count - 1; return true; }
|
||||||
|
|||||||
@@ -253,11 +253,11 @@ public:
|
|||||||
the_mesh.savePrefs();
|
the_mesh.savePrefs();
|
||||||
}
|
}
|
||||||
_task->stopMelody();
|
_task->stopMelody();
|
||||||
_task->gotoToolsScreen();
|
_task->leaveTool();
|
||||||
break;
|
break;
|
||||||
case MI_DISCARD:
|
case MI_DISCARD:
|
||||||
_task->stopMelody();
|
_task->stopMelody();
|
||||||
_task->gotoToolsScreen();
|
_task->leaveTool();
|
||||||
break;
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
@@ -265,7 +265,7 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cancel) { _task->stopMelody(); _task->gotoToolsScreen(); return true; }
|
if (cancel) { _task->stopMelody(); _task->leaveTool(); return true; }
|
||||||
if (menu_key) { openMenu(); return true; }
|
if (menu_key) { openMenu(); return true; }
|
||||||
|
|
||||||
if (left && _cursor > 0) { _cursor--; clampScroll(); return true; }
|
if (left && _cursor > 0) { _cursor--; clampScroll(); return true; }
|
||||||
|
|||||||
@@ -34,8 +34,10 @@ public:
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Opens a tool and moves it to the front of the recent list.
|
// Opens a tool and moves it to the front of the recent list. from_home: the
|
||||||
static void run(UITask* task, Action a) {
|
// tool's Back returns to Home instead of this list.
|
||||||
|
static void run(UITask* task, Action a, bool from_home = false) {
|
||||||
|
task->setToolFromHome(from_home);
|
||||||
if (s_recent[0] != a) { s_recent[1] = s_recent[0]; s_recent[0] = a; }
|
if (s_recent[0] != a) { s_recent[1] = s_recent[0]; s_recent[0] = a; }
|
||||||
switch (a) {
|
switch (a) {
|
||||||
case ACT_NEARBY: task->gotoNearbyScreen(); break;
|
case ACT_NEARBY: task->gotoNearbyScreen(); break;
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ public:
|
|||||||
if (c == KEY_CANCEL) {
|
if (c == KEY_CANCEL) {
|
||||||
_task->savePrefsIfDirty(_cfg_dirty);
|
_task->savePrefsIfDirty(_cfg_dirty);
|
||||||
if (_return_home) _task->gotoHomeScreen();
|
if (_return_home) _task->gotoHomeScreen();
|
||||||
else _task->gotoToolsScreen();
|
else _task->leaveTool();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (c == KEY_CONTEXT_MENU) { openActionMenu(); return true; }
|
if (c == KEY_CONTEXT_MENU) { openActionMenu(); return true; }
|
||||||
|
|||||||
@@ -605,7 +605,7 @@ class HomeScreen : public UIScreen {
|
|||||||
if (the_mesh.advert()) _advert_sent_ms = millis(); // the row says so
|
if (the_mesh.advert()) _advert_sent_ms = millis(); // the row says so
|
||||||
else _task->showAlert("Advert failed", 1000);
|
else _task->showAlert("Advert failed", 1000);
|
||||||
break;
|
break;
|
||||||
case QA_TOOL: ToolsScreen::run(_task, (ToolsScreen::Action)r.n); break;
|
case QA_TOOL: ToolsScreen::run(_task, (ToolsScreen::Action)r.n, true); break;
|
||||||
case QA_LOCK: _task->lockScreen(); break;
|
case QA_LOCK: _task->lockScreen(); break;
|
||||||
case QA_HIBERNATE: _shutdown_init = true; break; // waits for the button to be released
|
case QA_HIBERNATE: _shutdown_init = true; break; // waits for the button to be released
|
||||||
case QA_GPS: _task->toggleGPS(false); break;
|
case QA_GPS: _task->toggleGPS(false); break;
|
||||||
@@ -2022,7 +2022,8 @@ void UITask::begin(DisplayDriver* display, SensorManager* sensors, NodePrefs* no
|
|||||||
|
|
||||||
// onShow() is invoked by setCurrScreen(), so most navigators are just that.
|
// onShow() is invoked by setCurrScreen(), so most navigators are just that.
|
||||||
void UITask::gotoSettingsScreen() { setCurrScreen(settings); }
|
void UITask::gotoSettingsScreen() { setCurrScreen(settings); }
|
||||||
void UITask::gotoToolsScreen() { setCurrScreen(tools_screen); }
|
void UITask::gotoToolsScreen() { _tool_from_home = false; setCurrScreen(tools_screen); }
|
||||||
|
void UITask::leaveTool() { if (_tool_from_home) gotoHomeScreen(); else gotoToolsScreen(); }
|
||||||
void UITask::gotoBotScreen() { setCurrScreen(bot_screen); }
|
void UITask::gotoBotScreen() { setCurrScreen(bot_screen); }
|
||||||
void UITask::gotoNearbyScreen() { setCurrScreen(nearby_screen); }
|
void UITask::gotoNearbyScreen() { setCurrScreen(nearby_screen); }
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ class UITask : public UITaskBase, public UiCoreHost {
|
|||||||
unsigned long _next_refresh, _auto_off;
|
unsigned long _next_refresh, _auto_off;
|
||||||
NodePrefs* _node_prefs;
|
NodePrefs* _node_prefs;
|
||||||
bool _locked;
|
bool _locked;
|
||||||
|
bool _tool_from_home = false;
|
||||||
unsigned long _lock_wake_until; // when to blank screen again after locked wake (5s)
|
unsigned long _lock_wake_until; // when to blank screen again after locked wake (5s)
|
||||||
int _lock_seq_count; // Enter presses while Back held (lock/unlock sequence)
|
int _lock_seq_count; // Enter presses while Back held (lock/unlock sequence)
|
||||||
unsigned long _lock_seq_ms; // millis() of last lock-sequence press (for timeout)
|
unsigned long _lock_seq_ms; // millis() of last lock-sequence press (for timeout)
|
||||||
@@ -282,6 +283,9 @@ public:
|
|||||||
void pickBotChannelTarget(); // open Messages to choose the auto-reply bot's channel
|
void pickBotChannelTarget(); // open Messages to choose the auto-reply bot's channel
|
||||||
void pickBotRoomTarget(); // open Messages to choose the auto-reply bot's room
|
void pickBotRoomTarget(); // open Messages to choose the auto-reply bot's room
|
||||||
void gotoToolsScreen();
|
void gotoToolsScreen();
|
||||||
|
// A tool's Back: to Home when Home's Tools page opened it, else to the Tools list.
|
||||||
|
void leaveTool();
|
||||||
|
void setToolFromHome(bool home) { _tool_from_home = home; }
|
||||||
void gotoRingtoneEditor(int slot = 0);
|
void gotoRingtoneEditor(int slot = 0);
|
||||||
void gotoBotScreen();
|
void gotoBotScreen();
|
||||||
void pickAdminTarget(); // Admin is remote-only: open Nodes to pick a repeater/room
|
void pickAdminTarget(); // Admin is remote-only: open Nodes to pick a repeater/room
|
||||||
|
|||||||
Reference in New Issue
Block a user