From 838e660750b589636b95472f7421b5579f068727 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 5 Jun 2025 14:30:13 +0200 Subject: gui: reintroduce participant editor --- gui/CMakeLists.txt | 1 + gui/include/participant_editor.hpp | 43 ++++++++++++------------- gui/src/init.cpp | 4 ++- gui/src/participant_editor.cpp | 66 +++++++++++++++++++++++--------------- 4 files changed, 65 insertions(+), 49 deletions(-) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index a640b61..0581552 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -66,6 +66,7 @@ target_compile_definitions("resources" PUBLIC add_library("gui_impl" "src/init.cpp" + "src/participant_editor.cpp" "src/participant_row.cpp" "src/settings.cpp" ) diff --git a/gui/include/participant_editor.hpp b/gui/include/participant_editor.hpp index 39b721c..61f8269 100644 --- a/gui/include/participant_editor.hpp +++ b/gui/include/participant_editor.hpp @@ -3,21 +3,23 @@ * SPDX-License-Identifier: LGPL-2.1-only */ -#ifndef TURNS_UI_PARTICIPANT_EDITOR_HPP -#define TURNS_UI_PARTICIPANT_EDITOR_HPP +#ifndef TURNS_GUI_PARTICIPANT_EDITOR_HPP +#define TURNS_GUI_PARTICIPANT_EDITOR_HPP -#include "turns/core/disposition.hpp" -#include "turns/core/fwd.hpp" -#include "turns/core/participant.hpp" -#include "turns/ui/template_widget.hpp" +#include "template_widget.hpp" + +#include #include +#include +#include +#include +#include #include #include #include #include - #include #include #include @@ -25,19 +27,14 @@ #include #include -#include -#include -#include -#include - #include -namespace turns::ui +namespace Turns::gui { struct ParticipantEditor : template_widget { - using SignalFinishedType = sigc::signal; + using SignalFinishedType = sigc::signal; auto constexpr inline static children = std::array{ "disposition", @@ -46,20 +43,20 @@ namespace turns::ui "priority", }; - explicit ParticipantEditor(Glib::RefPtr participant); + explicit ParticipantEditor(Glib::RefPtr participant); - [[nodiscard]] auto get_disposition() const -> core::Disposition; + [[nodiscard]] auto get_disposition() const -> Participant::Disposition; [[nodiscard]] auto get_name() const -> Glib::ustring; - [[nodiscard]] auto get_participant() const -> Glib::RefPtr; + [[nodiscard]] auto get_participant() const -> Glib::RefPtr; [[nodiscard]] auto get_priority() const -> double; - auto set_disposition(core::Disposition value) -> void; + auto set_disposition(Participant::Disposition value) -> void; auto set_name(Glib::ustring const & value) -> void; - auto set_participant(Glib::RefPtr const & value) -> void; + auto set_participant(Glib::RefPtr const & value) -> void; auto set_priority(double value) -> void; - [[nodiscard]] auto property_participant() -> Glib::PropertyProxy>; - [[nodiscard]] auto property_participant() const -> Glib::PropertyProxy_ReadOnly>; + [[nodiscard]] auto property_participant() -> Glib::PropertyProxy>; + [[nodiscard]] auto property_participant() const -> Glib::PropertyProxy_ReadOnly>; auto signal_finished() -> SignalFinishedType; @@ -77,11 +74,11 @@ namespace turns::ui Glib::RefPtr m_disposition_factory; Glib::RefPtr m_disposition_model; - Glib::Property> m_participant; + Glib::Property> m_participant; SignalFinishedType m_signal_finished{}; }; -} // namespace turns::ui +} // namespace Turns::gui #endif \ No newline at end of file diff --git a/gui/src/init.cpp b/gui/src/init.cpp index c9a7295..734f953 100644 --- a/gui/src/init.cpp +++ b/gui/src/init.cpp @@ -1,10 +1,12 @@ #include "init.hpp" +#include "participant_editor.hpp" #include "participant_row.hpp" #include auto Turns::gui::init() -> void { - static_cast(ParticipantRow{nullptr}.get_type()); + g_type_ensure(ParticipantRow{nullptr}.get_type()); + g_type_ensure(ParticipantEditor{nullptr}.get_type()); } diff --git a/gui/src/participant_editor.cpp b/gui/src/participant_editor.cpp index 998d566..ca17495 100644 --- a/gui/src/participant_editor.cpp +++ b/gui/src/participant_editor.cpp @@ -3,22 +3,25 @@ * SPDX-License-Identifier: LGPL-2.1-only */ -#include "turns/ui/participant_editor.hpp" +#include "participant_editor.hpp" -#include "turns/core/disposition.hpp" -#include "turns/core/participant.hpp" -#include "turns/lang/messages.hpp" -#include "turns/ui/template_widget.hpp" +#include "messages.hpp" +#include "template_widget.hpp" + +#include #include +#include +#include +#include #include #include #include #include #include #include - +#include #include #include #include @@ -27,23 +30,36 @@ #include #include -#include -#include -#include - #include #include #include -namespace turns::ui +namespace Turns::gui { namespace { auto constexpr static TYPE_NAME = "ParticipantEditor"; auto constexpr static TEMPLATE = "/ch/arknet/Turns/participant_editor.ui"; + + auto presentation_name_for(Participant::Disposition disposition) -> char const * + { + switch (disposition) + { + case Participant::Disposition::Neutral: + return _("Neutral"); + case Participant::Disposition::Friendly: + return _("Friendly"); + case Participant::Disposition::Hostile: + return _("Hostile"); + case Participant::Disposition::Secret: + return _("Secret"); + } + + return "Invalid value"; + } } // namespace - ParticipantEditor::ParticipantEditor(Glib::RefPtr participant) + ParticipantEditor::ParticipantEditor(Glib::RefPtr participant) : Glib::ObjectBase{TYPE_NAME} , template_widget{TEMPLATE} , m_disposition{get_widget("disposition")} @@ -56,9 +72,9 @@ namespace turns::ui { m_finish->signal_clicked().connect(sigc::mem_fun(*this, &ParticipantEditor::handle_finish_clicked)); - for (auto n : std::views::iota(std::uint8_t{}, static_cast(core::Disposition::END))) + for (auto n : std::views::iota(std::uint8_t{}, static_cast(Participant::Disposition::Secret))) { - m_disposition_model->append(presentation_name_for(core::Disposition{n})); + m_disposition_model->append(presentation_name_for(Participant::Disposition{n})); } m_disposition_factory->signal_bind().connect(sigc::mem_fun(*this, &ParticipantEditor::handle_item_bind)); @@ -72,9 +88,9 @@ namespace turns::ui set_participant(participant); } - auto ParticipantEditor::get_disposition() const -> core::Disposition + auto ParticipantEditor::get_disposition() const -> Participant::Disposition { - return static_cast(m_disposition->get_selected()); + return static_cast(m_disposition->get_selected()); } auto ParticipantEditor::get_name() const -> Glib::ustring @@ -82,7 +98,7 @@ namespace turns::ui return m_name->get_text(); } - auto ParticipantEditor::get_participant() const -> Glib::RefPtr + auto ParticipantEditor::get_participant() const -> Glib::RefPtr { return m_participant.get_value(); } @@ -92,7 +108,7 @@ namespace turns::ui return m_priority->get_value(); } - auto ParticipantEditor::set_disposition(core::Disposition value) -> void + auto ParticipantEditor::set_disposition(Participant::Disposition value) -> void { m_disposition->set_selected(static_cast(value)); } @@ -102,7 +118,7 @@ namespace turns::ui m_name->set_text(value); } - auto ParticipantEditor::set_participant(Glib::RefPtr const & value) -> void + auto ParticipantEditor::set_participant(Glib::RefPtr const & value) -> void { m_participant.set_value(value); } @@ -112,12 +128,12 @@ namespace turns::ui m_priority->set_value(value); } - auto ParticipantEditor::property_participant() -> Glib::PropertyProxy> + auto ParticipantEditor::property_participant() -> Glib::PropertyProxy> { return m_participant.get_proxy(); } - auto ParticipantEditor::property_participant() const -> Glib::PropertyProxy_ReadOnly> + auto ParticipantEditor::property_participant() const -> Glib::PropertyProxy_ReadOnly> { return m_participant.get_proxy(); } @@ -129,7 +145,7 @@ namespace turns::ui auto ParticipantEditor::handle_finish_clicked() -> void { - m_signal_finished.emit(m_name->get_text(), m_priority->get_value(), static_cast(m_disposition->get_selected())); + m_signal_finished.emit(m_name->get_text(), m_priority->get_value(), static_cast(m_disposition->get_selected())); close(); } @@ -147,7 +163,7 @@ namespace turns::ui auto ParticipantEditor::handle_participant_changed() -> void { auto value = m_participant.get_value(); - set_title(_(value ? lang::edit_participant : lang::add_participant)); + set_title(_(value ? message::edit_participant : message::add_participant)); if (value) { Glib::Binding::bind_property(value->property_name(), @@ -160,8 +176,8 @@ namespace turns::ui m_disposition->property_selected(), Glib::Binding::Flags::BIDIRECTIONAL | Glib::Binding::Flags::SYNC_CREATE, [](auto value) { return static_cast(value); }, - [](auto value) { return static_cast(value); }); + [](auto value) { return static_cast(value); }); } } -} // namespace turns::ui \ No newline at end of file +} // namespace Turns::gui \ No newline at end of file -- cgit v1.2.3