summaryrefslogtreecommitdiffstats
path: root/app/app_manager.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'app/app_manager.hpp')
-rw-r--r--app/app_manager.hpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/app/app_manager.hpp b/app/app_manager.hpp
new file mode 100644
index 0000000..b7783ea
--- /dev/null
+++ b/app/app_manager.hpp
@@ -0,0 +1,45 @@
+#pragma once
+#include <vector>
+#include "base_app.hpp"
+
+// Interface to the app manager. These functions are accessible to other parts of the code, except open_apps, which is managed by the following functions.
+namespace app_mgr {
+ // List of pointers to currently running apps.
+ extern std::vector<BaseApp*> open_apps;
+
+ // Init a new app, that is not running.
+ BaseApp* app_init(int app_id);
+
+ // Allow the running app, referenced by app_id, to invoke its render routine.
+ void app_render(BaseApp* app);
+
+ // Delta is in ms, from time_since_button_press()
+ void app_btnpressed(BaseApp* app, uint gpio, unsigned long delta);
+
+ // This should only be called by pico-watch.cpp before app rendering, to chage the current app.
+ void app_switch(BaseApp* app, int new_appid);
+
+ // Requests the current app to be replaced by an other one. The replacement will be done at the right moment.
+ void app_switch_request(int to_appid);
+
+ // Refresh each app
+ void app_all_bgrefresh();
+
+ // Private functions following. I tried using anonymous namespaces but it was too complicated. I might come back to this later. Just don't use the following internal functions.
+
+ // Check if the specified app (via app_id) is already running.
+ // \return If app is init, pointer to app, else nullptr (more or less 0).
+ BaseApp* app_check_if_init(int app_id);
+
+ // Check the return value of the called application method and act on it.
+ void app_act_on_return_value(BaseApp* app, BaseApp::AppReturnValues return_value);
+
+ // Unconditionally set the new foreground app
+ void new_foreground_app(BaseApp* app);
+
+ // Called by app_init to create the app object.
+ BaseApp* app_create(int app_id);
+
+ // Quit the app referenced by the app_id.
+ void app_destroy(BaseApp* to_erase);
+}