#pragma once #include "cru/common/base.hpp" #include #include #include namespace cru::platform::native { struct NativeWindow; struct UiApplication : public virtual Interface { static UiApplication* CreateInstance(); static UiApplication* GetInstance(); virtual int Run() = 0; virtual void Quit(int quite_code) = 0; virtual void AddOnQuitHandler(const std::function& handler) = 0; virtual void InvokeLater(const std::function& action) = 0; virtual unsigned long SetTimeout(std::chrono::milliseconds milliseconds, const std::function& action) = 0; virtual unsigned long SetInterval(std::chrono::milliseconds milliseconds, const std::function& action) = 0; virtual void CancelTimer(unsigned long id) = 0; virtual std::vector GetAllWindow() = 0; virtual NativeWindow* CreateWindow(NativeWindow* parent) = 0; }; } // namespace cru::platform::ui