Files
trail-mate/tools/web_simulator/native_pages.cpp
Trail Mate Dev 7c3fcc31c6 fix(ci): refresh startup contract and format web simulator sources
Match the shell initialization call inside run() so its failure guard does not break the network-independence contract. Preserve initialization ordering and blocking-network checks. Apply clang-format 14 to the web preview sources. Verified all 2107 CI-scoped source files and seven positive/negative startup contract cases.
2026-09-16 15:01:59 +08:00

164 lines
4.5 KiB
C++

#include "lvgl.h"
#include "ui/app_runtime.h"
#include "ui/menu/menu_runtime.h"
#include "ui/screens/calculator/calculator_page_runtime.h"
#include "ui/screens/contacts/contacts_page_runtime.h"
#include "ui/screens/energy_sweep/energy_sweep_page_runtime.h"
#include "ui/screens/extensions/extensions_page_runtime.h"
#include "ui/screens/gnss/gnss_skyplot_page_runtime.h"
#include "ui/screens/gps/gps_page_runtime.h"
#include "ui/screens/network/network_page_shell.h"
#include "ui/screens/settings/settings_page_runtime.h"
#include "ui/screens/sstv/sstv_page_runtime.h"
#include "ui/screens/team/team_page_runtime.h"
#include "ui/screens/tracker/tracker_page_runtime.h"
#include "ui/screens/usb/usb_page_runtime.h"
#include "ui/screens/walkie_talkie/walkie_talkie_page_runtime.h"
#include <emscripten.h>
static int current_page = -1;
int preview_current_page() { return current_page; }
void preview_menu_enter();
void preview_menu_exit();
void preview_power_enter();
void preview_power_exit();
void preview_chat_enter(int page);
void preview_chat_exit();
void preview_exit_page()
{
switch (current_page)
{
case 0:
calculator::ui::runtime::exit(lv_screen_active());
break;
case 1:
gnss::ui::runtime::exit(lv_screen_active());
break;
case 2:
usb_storage::ui::runtime::exit(lv_screen_active());
break;
case 3:
walkie_page::ui::runtime::exit(lv_screen_active());
break;
case 4:
sstv_page::ui::runtime::exit(lv_screen_active());
break;
case 8:
extensions::ui::runtime::exit(lv_screen_active());
break;
case 9:
network::ui::shell::exit(nullptr, lv_screen_active());
break;
case 11:
settings::ui::runtime::exit(lv_screen_active());
break;
case 12:
contacts::ui::runtime::exit(lv_screen_active());
break;
case 13:
team::ui::runtime::exit(lv_screen_active());
break;
case 14:
tracker::ui::runtime::exit(lv_screen_active());
break;
case 15:
gps::ui::runtime::exit(lv_screen_active());
break;
case 16:
energy_sweep::ui::runtime::exit(lv_screen_active());
break;
case 17:
preview_menu_exit();
break;
case 18:
preview_power_exit();
break;
case 10:
preview_menu_exit();
break;
case 5:
case 6:
case 7:
preview_chat_exit();
break;
}
current_page = -1;
}
extern "C" EMSCRIPTEN_KEEPALIVE void native_open_page(int page)
{
preview_exit_page();
lv_group_remove_all_objs(app_g);
if (page != 10 && page != 17 && page != 18) ui::menu_runtime::setScene(ui::menu_runtime::Scene::App);
switch (page)
{
case 0:
calculator::ui::runtime::enter(nullptr, lv_screen_active());
break;
case 1:
gnss::ui::runtime::enter(nullptr, lv_screen_active());
break;
case 2:
usb_storage::ui::runtime::enter(nullptr, lv_screen_active());
break;
case 3:
walkie_page::ui::runtime::enter(nullptr, lv_screen_active());
break;
case 4:
sstv_page::ui::runtime::enter(nullptr, lv_screen_active());
break;
case 8:
extensions::ui::runtime::enter(nullptr, lv_screen_active());
break;
case 9:
network::ui::shell::enter(nullptr, lv_screen_active());
break;
case 11:
settings::ui::runtime::enter(nullptr, lv_screen_active());
break;
case 12:
contacts::ui::runtime::enter(nullptr, lv_screen_active());
break;
case 13:
team::ui::runtime::enter(nullptr, lv_screen_active());
break;
case 14:
tracker::ui::runtime::enter(nullptr, lv_screen_active());
break;
case 15:
gps::ui::runtime::enter(nullptr, lv_screen_active());
break;
case 16:
energy_sweep::ui::runtime::enter(nullptr, lv_screen_active());
break;
case 17:
preview_menu_enter();
ui::menu_runtime::handleShortcutKey('h', 1);
break;
case 18:
preview_power_enter();
break;
case 10:
preview_menu_enter();
break;
case 5:
case 6:
case 7:
preview_chat_enter(page);
break;
default:
return;
}
current_page = page;
lv_obj_update_layout(lv_screen_active());
lv_refr_now(nullptr);
}
void ui_request_rebuild_active_app()
{
lv_async_call([](void*)
{const int page=current_page;native_open_page(page); },
nullptr);
}