diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/include/turns/app/windows/main.hpp | 6 | ||||
| -rw-r--r-- | app/include/turns/app/windows/participant_editor.hpp | 10 | ||||
| -rw-r--r-- | app/src/windows/main.cpp | 14 | ||||
| -rw-r--r-- | app/src/windows/participant_editor.cpp | 19 |
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 |
