PocketPutr/Desktop_Test/system_manager.cpp
2026-01-05 16:57:37 +01:00

48 lines
1.3 KiB
C++

#include "program.h"
#include "system_manager.h"
#include <Arduino.h>
std::vector<Program*> SystemManager::init(DISPLAY_STATE* display_state) {
_display_state = display_state;
funcMap["0"] = &InstalledProgram::do_stuff;
funcMap["1"] = &InstalledProgram::do_some_other_stuff;
funcMap["2"] = &InstalledProgram::lol;
funcMap["3"] = &InstalledProgram::omagelol;
funcMap["4"] = &InstalledProgram::sheeesh;
return _programs;
}
bool SystemManager::spawn_program(Window* window, std::string program_name) {
for (size_t i = 0; i < _programs.size(); ++i) {
if (_programs[i]->_task_name == window->title) return false;
}
// Check if the program exists in the map
if (funcMap.find(program_name) == funcMap.end()) {
return false;
}
Serial.println(window->title.c_str());
Program* program = new Program(_display_state);
program->_program_func = funcMap[program_name];
window->id = _next_program_id;
program->init(_next_program_id, window->title, window);
_next_program_id++;
_programs.push_back(program);
return true;
}
void SystemManager::close_program(int id) {
for (size_t i = 0; i < _programs.size(); ++i) {
if (_programs[i]->_id == id) {
_programs[i]->close();
delete _programs[i]; // Free the memory
_programs.erase(_programs.begin() + i);
break; // Exit after erase
}
}
}