mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-03 20:30:43 +00:00
Second attempt to move modules down the navigation bar
This commit is contained in:
parent
1736db6b56
commit
bf5c9f6263
@ -775,33 +775,6 @@ void Screen::setFrames(FrameFocus focus)
|
|||||||
|
|
||||||
size_t numframes = 0;
|
size_t numframes = 0;
|
||||||
|
|
||||||
moduleFrames = MeshModule::GetMeshModulesWithUIFrames();
|
|
||||||
LOG_DEBUG("Show %d module frames", moduleFrames.size());
|
|
||||||
|
|
||||||
// put all of the module frames first.
|
|
||||||
// this is a little bit of a dirty hack; since we're going to call
|
|
||||||
// the same drawModuleFrame handler here for all of these module frames
|
|
||||||
// and then we'll just assume that the state->currentFrame value
|
|
||||||
// is the same offset into the moduleFrames vector
|
|
||||||
// so that we can invoke the module's callback
|
|
||||||
for (auto i = moduleFrames.begin(); i != moduleFrames.end(); ++i) {
|
|
||||||
// Draw the module frame, using the hack described above
|
|
||||||
normalFrames[numframes] = drawModuleFrame;
|
|
||||||
|
|
||||||
// Check if the module being drawn has requested focus
|
|
||||||
// We will honor this request later, if setFrames was triggered by a UIFrameEvent
|
|
||||||
MeshModule *m = *i;
|
|
||||||
if (m->isRequestingFocus())
|
|
||||||
fsi.positions.focusedModule = numframes;
|
|
||||||
if (m == waypointModule)
|
|
||||||
fsi.positions.waypoint = numframes;
|
|
||||||
|
|
||||||
indicatorIcons.push_back(icon_module);
|
|
||||||
numframes++;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_DEBUG("Added modules. numframes: %d", numframes);
|
|
||||||
|
|
||||||
// If we have a critical fault, show it first
|
// If we have a critical fault, show it first
|
||||||
fsi.positions.fault = numframes;
|
fsi.positions.fault = numframes;
|
||||||
if (error_code) {
|
if (error_code) {
|
||||||
@ -898,6 +871,36 @@ void Screen::setFrames(FrameFocus focus)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Beware of what changes you make in this code!
|
||||||
|
// We pass numfames into GetMeshModulesWithUIFrames() which is highly important!
|
||||||
|
// Inside of that callback, goes over to MeshModule.cpp and we run
|
||||||
|
// modulesWithUIFrames.resize(startIndex, nullptr), to insert nullptr
|
||||||
|
// entries until we're ready to start building the matching entries.
|
||||||
|
// We are doing our best to keep the normalFrames vector
|
||||||
|
// and the moduleFrames vector in lock step.
|
||||||
|
moduleFrames = MeshModule::GetMeshModulesWithUIFrames(numframes);
|
||||||
|
LOG_DEBUG("Show %d module frames", moduleFrames.size());
|
||||||
|
|
||||||
|
for (auto i = moduleFrames.begin(); i != moduleFrames.end(); ++i) {
|
||||||
|
// Draw the module frame, using the hack described above
|
||||||
|
if (*i != nullptr) {
|
||||||
|
normalFrames[numframes] = drawModuleFrame;
|
||||||
|
|
||||||
|
// Check if the module being drawn has requested focus
|
||||||
|
// We will honor this request later, if setFrames was triggered by a UIFrameEvent
|
||||||
|
MeshModule *m = *i;
|
||||||
|
if (m && m->isRequestingFocus())
|
||||||
|
fsi.positions.focusedModule = numframes;
|
||||||
|
if (m && m == waypointModule)
|
||||||
|
fsi.positions.waypoint = numframes;
|
||||||
|
|
||||||
|
indicatorIcons.push_back(icon_module);
|
||||||
|
numframes++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_DEBUG("Added modules. numframes: %d", numframes);
|
||||||
|
|
||||||
fsi.frameCount = numframes; // Total framecount is used to apply FOCUS_PRESERVE
|
fsi.frameCount = numframes; // Total framecount is used to apply FOCUS_PRESERVE
|
||||||
this->frameCount = numframes; // ✅ Save frame count for use in custom overlay
|
this->frameCount = numframes; // ✅ Save frame count for use in custom overlay
|
||||||
LOG_DEBUG("Finished build frames. numframes: %d", numframes);
|
LOG_DEBUG("Finished build frames. numframes: %d", numframes);
|
||||||
@ -1249,7 +1252,7 @@ int Screen::handleInputEvent(const InputEvent *event)
|
|||||||
// Ask any MeshModules if they're handling keyboard input right now
|
// Ask any MeshModules if they're handling keyboard input right now
|
||||||
bool inputIntercepted = false;
|
bool inputIntercepted = false;
|
||||||
for (MeshModule *module : moduleFrames) {
|
for (MeshModule *module : moduleFrames) {
|
||||||
if (module->interceptingKeyboardInput())
|
if (module && module->interceptingKeyboardInput())
|
||||||
inputIntercepted = true;
|
inputIntercepted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -244,9 +244,13 @@ void setReplyTo(meshtastic_MeshPacket *p, const meshtastic_MeshPacket &to)
|
|||||||
p->decoded.request_id = to.id;
|
p->decoded.request_id = to.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<MeshModule *> MeshModule::GetMeshModulesWithUIFrames()
|
std::vector<MeshModule *> MeshModule::GetMeshModulesWithUIFrames(int startIndex)
|
||||||
{
|
{
|
||||||
std::vector<MeshModule *> modulesWithUIFrames;
|
std::vector<MeshModule *> modulesWithUIFrames;
|
||||||
|
|
||||||
|
// Fill with nullptr up to startIndex
|
||||||
|
modulesWithUIFrames.resize(startIndex, nullptr);
|
||||||
|
|
||||||
if (modules) {
|
if (modules) {
|
||||||
for (auto i = modules->begin(); i != modules->end(); ++i) {
|
for (auto i = modules->begin(); i != modules->end(); ++i) {
|
||||||
auto &pi = **i;
|
auto &pi = **i;
|
||||||
|
@ -75,7 +75,7 @@ class MeshModule
|
|||||||
*/
|
*/
|
||||||
static void callModules(meshtastic_MeshPacket &mp, RxSource src = RX_SRC_RADIO);
|
static void callModules(meshtastic_MeshPacket &mp, RxSource src = RX_SRC_RADIO);
|
||||||
|
|
||||||
static std::vector<MeshModule *> GetMeshModulesWithUIFrames();
|
static std::vector<MeshModule *> GetMeshModulesWithUIFrames(int startIndex);
|
||||||
static void observeUIEvents(Observer<const UIFrameEvent *> *observer);
|
static void observeUIEvents(Observer<const UIFrameEvent *> *observer);
|
||||||
static AdminMessageHandleResult handleAdminMessageForAllModules(const meshtastic_MeshPacket &mp,
|
static AdminMessageHandleResult handleAdminMessageForAllModules(const meshtastic_MeshPacket &mp,
|
||||||
meshtastic_AdminMessage *request,
|
meshtastic_AdminMessage *request,
|
||||||
|
@ -334,13 +334,8 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event)
|
|||||||
}
|
}
|
||||||
// Printable char (ASCII) opens free text compose
|
// Printable char (ASCII) opens free text compose
|
||||||
if (event->kbchar >= 32 && event->kbchar <= 126) {
|
if (event->kbchar >= 32 && event->kbchar <= 126) {
|
||||||
runState = CANNED_MESSAGE_RUN_STATE_FREETEXT;
|
LaunchFreetextWithDestination(NODENUM_BROADCAST);
|
||||||
requestFocus();
|
return 1;
|
||||||
UIFrameEvent e;
|
|
||||||
e.action = UIFrameEvent::Action::REGENERATE_FRAMESET;
|
|
||||||
notifyObservers(&e);
|
|
||||||
// Immediately process the input in the new state (freetext)
|
|
||||||
return handleFreeTextInput(event);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user