aboutsummaryrefslogtreecommitdiff
path: root/app/src/windows/participant_editor.cpp
blob: bab77317588110e6291bf46b16617f086a197d43 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "turns/app/windows/participant_editor.hpp"

#include <print>

#include <gtkmm/editable.h>
#include <gtkmm/listboxrow.h>

namespace turns::app::windows
{

  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));
  }

  auto participant_editor::present(Gtk::Widget * parent) -> void
  {
    adw_dialog_present(m_adw, parent->gobj());
  }

  auto participant_editor::set_title(Glib::ustring const & value) -> void
  {
    adw_dialog_set_title(m_adw, value.c_str());
  }

  auto participant_editor::signal_finished() -> signal_finished_type
  {
    return m_signal_finished;
  }

  auto participant_editor::handle_finish_clicked() -> void
  {
    auto name = gtk_editable_get_text(GTK_EDITABLE(m_name));
    auto priority = adw_spin_row_get_value(m_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