/* * SPDX-FileCopyrightText: 2025 Felix Morgner * SPDX-License-Identifier: LGPL-2.1-only */ #ifndef TURNS_GUI_TRACKER_HPP #define TURNS_GUI_TRACKER_HPP #include "template_widget.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Turns::gui { struct Tracker : template_widget { auto constexpr inline static children = std::array{ "controls", "empty", "overlay", "stack", "start", "title", }; Tracker(Glib::RefPtr const & app, Glib::RefPtr const & settings); auto load(Glib::RefPtr file) -> void; private: /** Setup */ auto setup_actions() -> void; auto setup_colors() -> void; /** Actions */ auto add_participant() -> void; auto delete_participant(Glib::VariantBase param) -> void; auto edit_participant(Glib::VariantBase param) -> void; auto open() -> void; auto preferences() -> void; auto save(bool force_ask) -> void; auto stop() -> void; /** Event Handlers */ auto on_open_response(Glib::RefPtr result, Glib::RefPtr dialog) -> void; auto on_save_response(Glib::RefPtr result, Glib::RefPtr dialog) -> void; auto on_load_content_done(Glib::RefPtr result) -> void; auto on_replace_content_done(Glib::RefPtr result) -> void; auto on_settings_changed(Glib::ustring key) -> void; /** Helpers */ auto show_error(std::exception const & e) -> void; auto show_toast(std::string const & message) -> void; auto start_replace_content() -> void; auto update_colors() -> void; auto update_subtitle() -> void; Gtk::Revealer * m_controls; Gtk::Widget * m_empty; Adwaita::ToastOverlay * m_overlay; Gtk::Stack * m_stack; Gtk::Button * m_start; Adwaita::WindowTitle * m_title; Glib::RefPtr m_turn_order; Glib::RefPtr m_settings{}; Glib::PropertyProxy m_subtitle; Glib::RefPtr m_file{}; std::string m_file_etag{}; std::string m_file_buffer{}; Glib::RefPtr m_css{}; }; } // namespace Turns::gui #endif