48 lines
1.3 KiB
C++
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
|
|
}
|
|
}
|
|
} |