/* * SPDX-FileCopyrightText: 2025 Felix Morgner * SPDX-License-Identifier: LGPL-2.1-only */ #include "messages.hpp" #include "participant_editor.hpp" #include "preferences.hpp" #include "tracker.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 { namespace { auto file_filters() { auto filters = Gio::ListStore::create(); auto filter = Gtk::FileFilter::create(); filter->set_name(_("Turns Files")); filter->add_pattern("*.trns"); filters->append(filter); return filters; } } // namespace auto Tracker::add_participant() -> void { auto dialog = Gtk::make_managed(nullptr); dialog->signal_finished().connect([this](auto n, auto p, auto d) { m_turn_order->add(Participant::create(n, p, d)); }); dialog->present(this); } auto Tracker::delete_participant(Glib::VariantBase param) -> void { auto index = Glib::VariantBase::cast_dynamic>(param); m_turn_order->remove_at(index.get()); } auto Tracker::edit_participant(Glib::VariantBase param) -> void { auto index = Glib::VariantBase::cast_dynamic>(param); auto participant = m_turn_order->get_typed_object(index.get()); auto dialog = Gtk::make_managed(participant); dialog->present(this); } auto Tracker::open() -> void { auto dialog = Gtk::FileDialog::create(); dialog->set_filters(file_filters()); dialog->open(sigc::bind(sigc::mem_fun(*this, &Tracker::on_open_response), dialog)); } auto Tracker::preferences() -> void { auto preferences = Gtk::make_managed(m_settings); auto dialog = Gtk::make_managed(); dialog->add(*preferences); dialog->set_visible_page(*preferences); dialog->present(this); } auto Tracker::save(bool force_ask) -> void { if (m_file && !force_ask) { start_replace_content(); } else { auto dialog = Gtk::FileDialog::create(); m_file ? dialog->set_initial_file(m_file) : dialog->set_initial_name(_(message::new_turn_order_file_name)); dialog->set_filters(file_filters()); dialog->save(*this, sigc::bind(sigc::mem_fun(*this, &Tracker::on_save_response), dialog)); } } auto Tracker::stop() -> void { auto dialog = Adwaita::AlertDialog::create(_(message::stop_turn_order), _(message::question_clear_turn_order)); dialog->add_response("stop", _(message::stop)); dialog->set_response_appearance("stop", Adwaita::ResponseAppearance::Suggested); dialog->add_response("clear", _(message::stop_and_clear)); dialog->set_response_appearance("clear", Adwaita::ResponseAppearance::Destructive); dialog->add_response("cancel", _(message::cancel)); dialog->set_response_appearance("cancel", Adwaita::ResponseAppearance::Default); dialog->set_close_response("cancel"); dialog->set_default_response("cancel"); dialog->choose(*this, nullptr, [dialog = std::move(dialog), this](auto const & result) { auto response = dialog->choose_finish(result); if (response == "cancel") { return; } if (response == "clear") { m_turn_order->clear(); } // m_turn_order->stop(); }); } } // namespace Turns::gui