Files
Archimedes/src/example_apps/TerminalEmbed/TerminalEmbed.cpp
2026-02-15 16:07:21 -06:00

67 lines
1.5 KiB
C++

#include "TerminalEmbed.h"
void TerminalEmbed::run() {
for(auto m : runOrder)
modules[m]->onLoad();
// Main loop
while (!done && !runOrder.empty()) {
for(auto m : runOrder) {
modules[m]->run();
}
handleEvents();
for(auto m : toClose) {
unload(m);
}
toClose.clear();
for(auto m : toOpen) {
if(std::holds_alternative<std::string>(m)) {
load(std::get<std::string>(m))->onLoad();
} else {
load(std::get<Archimedes::Module*>(m))->onLoad();
}
}
toOpen.clear();
}
}
bool TerminalEmbed::onEvent(const Archimedes::Event& event) {
unsigned int type = getEventType(event);
if(type == getEventType(Archimedes::DoLoadModuleEvent())) {
Archimedes::DoLoadModuleEvent& e = (Archimedes::DoLoadModuleEvent&) event;
startModule(e.module);
return true;
} else if(type == getEventType(Archimedes::DoUnloadModuleEvent())) {
Archimedes::DoUnloadModuleEvent& e = (Archimedes::DoUnloadModuleEvent&) event;
stopModule(e.module);
return true;
} else if(type == getEventType(Archimedes::LoadModuleEvent())) {
return true;
} else if(type == getEventType(Archimedes::UnloadModuleEvent())) {
return true;
} else if(type == getEventType(Archimedes::AnonymousEvent())) {
return true;
}
return false;
}