summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2024-07-15 00:22:07 +0200
committerFelix Morgner <felix.morgner@gmail.com>2024-07-15 00:22:07 +0200
commit85e1761f3a1107b0b5988de3225d69b586a1c71b (patch)
tree1b47475950fb8658ea94964077f3a9ab87b50140
parent081627fcfb9076ce243a9adde4743117bc48a767 (diff)
downloadturns-85e1761f3a1107b0b5988de3225d69b586a1c71b.tar.xz
turns-85e1761f3a1107b0b5988de3225d69b586a1c71b.zip
app/ui: enable participant editing
-rw-r--r--app/include/turns/app/windows/main.hpp6
-rw-r--r--app/include/turns/app/windows/participant_editor.hpp10
-rw-r--r--app/src/windows/main.cpp14
-rw-r--r--app/src/windows/participant_editor.cpp19
4 files changed, 42 insertions, 7 deletions
diff --git a/app/include/turns/app/windows/main.hpp b/app/include/turns/app/windows/main.hpp
index 00844ac..22dab74 100644
--- a/app/include/turns/app/windows/main.hpp
+++ b/app/include/turns/app/windows/main.hpp
@@ -7,14 +7,15 @@
#include <giomm/liststore.h>
#include <glibmm/object.h>
#include <glibmm/refptr.h>
+#include <glibmm/variant.h>
#include <gtkmm/applicationwindow.h>
#include <gtkmm/builder.h>
#include <gtkmm/button.h>
#include <gtkmm/listbox.h>
#include <gtkmm/menubutton.h>
-#include <gtkmm/widget.h>
-#include <gtkmm/stack.h>
#include <gtkmm/scrolledwindow.h>
+#include <gtkmm/stack.h>
+#include <gtkmm/widget.h>
namespace turns::app::windows
{
@@ -26,6 +27,7 @@ namespace turns::app::windows
private:
auto handle_create_list_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *;
auto handle_add_participant() -> void;
+ auto handle_edit_participant(Glib::VariantBase param) -> void;
AdwApplicationWindow * m_adw;
Gtk::Widget * m_empty;
diff --git a/app/include/turns/app/windows/participant_editor.hpp b/app/include/turns/app/windows/participant_editor.hpp
index e9c26a0..0d7b518 100644
--- a/app/include/turns/app/windows/participant_editor.hpp
+++ b/app/include/turns/app/windows/participant_editor.hpp
@@ -1,6 +1,8 @@
#ifndef TURNS_APP_WINDOWS_PARTICIPANT_EDITOR_HPP
#define TURNS_APP_WINDOWS_PARTICIPANT_EDITOR_HPP
+#include "turns/domain/participant.hpp"
+
#include <adwaita.h>
#include <glibmm/refptr.h>
#include <gtkmm/builder.h>
@@ -14,13 +16,13 @@ namespace turns::app::windows
struct participant_editor : Gtk::Widget
{
- using signal_finished_type = sigc::signal<void (Glib::ustring, float)>;
+ using signal_finished_type = sigc::signal<void(Glib::ustring, float)>;
- participant_editor(BaseObjectType * base, Glib::RefPtr<Gtk::Builder> const builder);
+ participant_editor(BaseObjectType * base, Glib::RefPtr<Gtk::Builder> const builder, Glib::RefPtr<domain::participant> obj = {});
auto present(Gtk::Widget * parent) -> void;
- auto set_title(Glib::ustring const & value) -> void;
+ auto set_title(Glib::ustring const & value) -> void;
auto signal_finished() -> signal_finished_type;
@@ -30,6 +32,8 @@ namespace turns::app::windows
AdwDialog * m_adw;
Gtk::Button * m_finish;
+ Glib::RefPtr<domain::participant> m_participant;
+
AdwComboRow * m_disposition{};
AdwEntryRow * m_name{};
AdwSpinRow * m_priority{};
diff --git a/app/src/windows/main.cpp b/app/src/windows/main.cpp
index d217e9f..d654a3b 100644
--- a/app/src/windows/main.cpp
+++ b/app/src/windows/main.cpp
@@ -44,6 +44,7 @@ namespace turns::app::windows
auto index = Glib::VariantBase::cast_dynamic<Glib::Variant<int>>(param);
m_participants->remove(index.get());
});
+ add_action_with_parameter("edit", Glib::VARIANT_TYPE_INT32, sigc::mem_fun(*this, &main::handle_edit_participant));
}
auto main::handle_create_list_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *
@@ -65,4 +66,17 @@ namespace turns::app::windows
dialog->signal_finished().connect([this](auto name, auto priority) { m_participants->append(name, priority); });
}
+ auto main::handle_edit_participant(Glib::VariantBase param) -> void
+ {
+ auto index = Glib::VariantBase::cast_dynamic<Glib::Variant<int>>(param);
+ auto participant = m_participants->get_item(index.get());
+
+ auto builder = Gtk::Builder::create_from_resource("/ch/arknet/Turns/windows/participant_editor.ui");
+ auto dialog = Gtk::Builder::get_widget_derived<windows::participant_editor>(builder, "participant_editor", participant);
+
+ dialog->set_title(_("Add participant"));
+ dialog->present(this);
+ dialog->signal_finished().connect([this](auto name, auto priority) { m_participants->append(name, priority); });
+ }
+
} // namespace turns::app::windows
diff --git a/app/src/windows/participant_editor.cpp b/app/src/windows/participant_editor.cpp
index f89fc20..bab7731 100644
--- a/app/src/windows/participant_editor.cpp
+++ b/app/src/windows/participant_editor.cpp
@@ -8,15 +8,22 @@
namespace turns::app::windows
{
- participant_editor::participant_editor(BaseObjectType * base, Glib::RefPtr<Gtk::Builder> const builder)
+ participant_editor::participant_editor(BaseObjectType * base, Glib::RefPtr<Gtk::Builder> const builder, Glib::RefPtr<domain::participant> obj)
: Gtk::Widget{base}
, m_adw{ADW_DIALOG(gobj())}
, m_finish{builder->get_widget<Gtk::Button>("finish")}
+ , m_participant{obj}
{
m_disposition = ADW_COMBO_ROW(builder->get_widget<Gtk::ListBoxRow>("disposition")->gobj());
m_name = ADW_ENTRY_ROW(builder->get_widget<Gtk::ListBoxRow>("name")->gobj());
m_priority = ADW_SPIN_ROW(builder->get_widget<Gtk::ListBoxRow>("priority")->gobj());
+ if (obj)
+ {
+ gtk_editable_set_text(GTK_EDITABLE(m_name), m_participant->property_name().get_value().c_str());
+ adw_spin_row_set_value(m_priority, m_participant->property_priority().get_value());
+ }
+
m_finish->signal_clicked().connect(sigc::mem_fun(*this, &participant_editor::handle_finish_clicked));
}
@@ -39,7 +46,15 @@ namespace turns::app::windows
{
auto name = gtk_editable_get_text(GTK_EDITABLE(m_name));
auto priority = adw_spin_row_get_value(m_priority);
- m_signal_finished.emit(name, priority);
+ if (m_participant)
+ {
+ m_participant->property_name().set_value(name);
+ m_participant->property_priority().set_value(priority);
+ }
+ else
+ {
+ m_signal_finished.emit(name, priority);
+ }
adw_dialog_close(m_adw);
}
} // namespace turns::app::windows \ No newline at end of file