summaryrefslogtreecommitdiff
path: root/gui/include/participant_editor.hpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2025-05-24 11:58:39 +0200
committerFelix Morgner <felix.morgner@gmail.com>2025-05-24 11:58:39 +0200
commit72ab1fb4c1bf363f46470816d8b914a78ac493c4 (patch)
tree27349a1bacbab4ea698be35d2d3d9b5184b15ca1 /gui/include/participant_editor.hpp
parentb7f2ff4d991ae068f7834bf8e565f6261bf7fff1 (diff)
downloadturns-72ab1fb4c1bf363f46470816d8b914a78ac493c4.tar.xz
turns-72ab1fb4c1bf363f46470816d8b914a78ac493c4.zip
gui: restructure file layout and apply licenses
Diffstat (limited to 'gui/include/participant_editor.hpp')
-rw-r--r--gui/include/participant_editor.hpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/gui/include/participant_editor.hpp b/gui/include/participant_editor.hpp
new file mode 100644
index 0000000..39b721c
--- /dev/null
+++ b/gui/include/participant_editor.hpp
@@ -0,0 +1,87 @@
+/*
+ * SPDX-FileCopyrightText: 2025 Felix Morgner <felix.morgner@gmail.com>
+ * SPDX-License-Identifier: LGPL-2.1-only
+ */
+
+#ifndef TURNS_UI_PARTICIPANT_EDITOR_HPP
+#define TURNS_UI_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 <sigc++/signal.h>
+
+#include <glibmm/property.h>
+#include <glibmm/propertyproxy.h>
+#include <glibmm/refptr.h>
+#include <glibmm/ustring.h>
+
+#include <gtkmm/builder.h>
+#include <gtkmm/button.h>
+#include <gtkmm/listitem.h>
+#include <gtkmm/signallistitemfactory.h>
+#include <gtkmm/stringlist.h>
+#include <gtkmm/widget.h>
+
+#include <adwaitamm/comborow.hpp>
+#include <adwaitamm/dialog.hpp>
+#include <adwaitamm/entryrow.hpp>
+#include <adwaitamm/spinrow.hpp>
+
+#include <array>
+
+namespace turns::ui
+{
+
+ struct ParticipantEditor : template_widget<ParticipantEditor, Adwaita::Dialog>
+ {
+ using SignalFinishedType = sigc::signal<void(Glib::ustring, float, core::Disposition)>;
+
+ auto constexpr inline static children = std::array{
+ "disposition",
+ "finish",
+ "name",
+ "priority",
+ };
+
+ explicit ParticipantEditor(Glib::RefPtr<core::Participant> participant);
+
+ [[nodiscard]] auto get_disposition() const -> core::Disposition;
+ [[nodiscard]] auto get_name() const -> Glib::ustring;
+ [[nodiscard]] auto get_participant() const -> Glib::RefPtr<core::Participant>;
+ [[nodiscard]] auto get_priority() const -> double;
+
+ auto set_disposition(core::Disposition value) -> void;
+ auto set_name(Glib::ustring const & value) -> void;
+ auto set_participant(Glib::RefPtr<core::Participant> const & value) -> void;
+ auto set_priority(double value) -> void;
+
+ [[nodiscard]] auto property_participant() -> Glib::PropertyProxy<Glib::RefPtr<core::Participant>>;
+ [[nodiscard]] auto property_participant() const -> Glib::PropertyProxy_ReadOnly<Glib::RefPtr<core::Participant>>;
+
+ auto signal_finished() -> SignalFinishedType;
+
+ private:
+ auto handle_finish_clicked() -> void;
+ auto handle_item_bind(Glib::RefPtr<Gtk::ListItem> item) -> void;
+ auto handle_item_setup(Glib::RefPtr<Gtk::ListItem> item) -> void;
+ auto handle_participant_changed() -> void;
+
+ Adwaita::ComboRow * m_disposition;
+ Gtk::Button * m_finish;
+ Adwaita::EntryRow * m_name;
+ Adwaita::SpinRow * m_priority;
+
+ Glib::RefPtr<Gtk::SignalListItemFactory> m_disposition_factory;
+ Glib::RefPtr<Gtk::StringList> m_disposition_model;
+
+ Glib::Property<Glib::RefPtr<core::Participant>> m_participant;
+
+ SignalFinishedType m_signal_finished{};
+ };
+
+} // namespace turns::ui
+
+#endif \ No newline at end of file