8using namespace tinygui;
10struct MilkDoorBoardInfo {
16 std::string expiry_date;
19 std::optional<uint64_t> remaining_percent{std::nullopt};
24 std::optional<std::uint16_t> error_flags{std::nullopt};
28 std::string app_version;
32 std::string fw_version;
36 std::string milk_system_sn;
38 auto operator==(
const MilkDoorBoardInfo& other)
const ->
bool {
39 return online == other.online && expiry_date == other.expiry_date &&
40 remaining_percent == other.remaining_percent &&
41 error_flags == other.error_flags &&
42 app_version == other.app_version && fw_version == other.fw_version &&
43 milk_system_sn == other.milk_system_sn;
49inline constexpr int K_DEMO_WINDOW_DEFAULT_LEVEL = 50;
51class DemoWindow :
public INkWindow {
53 explicit DemoWindow(
const Rect& bounds) : m_bounds_(bounds) {}
55 void build_ui(nk_context& ctx,
const GuiResources& resources)
override;
56 [[nodiscard]]
auto get_level() const ->
int {
return this->m_level_; }
57 void set_param_get_lambda(std::function<MilkDoorBoardInfo()>&& func) {
58 m_param_func_ = std::move(func);
61 auto has_new_data() ->
bool override {
63 m_new_info_ = m_param_func_();
66 !(m_new_info_ == m_board_info_) || m_old_level_ != m_level_;
68 std::swap(m_board_info_, m_new_info_);
69 m_old_level_ = m_level_;
75 void set_level(
const int val) { this->m_level_ = val; }
79 std::function<MilkDoorBoardInfo()> m_param_func_;
80 MilkDoorBoardInfo m_board_info_{};
81 MilkDoorBoardInfo m_new_info_{};
82 int m_level_{K_DEMO_WINDOW_DEFAULT_LEVEL};
83 int m_old_level_{K_DEMO_WINDOW_DEFAULT_LEVEL};