summaryrefslogtreecommitdiff
path: root/app/src/application.cpp
blob: 083cf9bb165a821384f4c11e86d12bd57e788864 (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
61
62
63
64
65
66
67
68
69
70
71
72
73
#include "turns/app/application.hpp"

#include "turns/core/init.hpp"
#include "turns/ui/init.hpp"
#include "turns/ui/windows/tracker.hpp"

#include <sigc++/functors/mem_fun.h>

#include <gtkmm/application.h>
#include <gtkmm/builder.h>
#include <gtkmm/init.h>

namespace turns::app
{

  auto application::create() -> std::shared_ptr<application>
  {
    Gtk::init_gtkmm_internals();
    adw_init();
    core::register_types();
    ui::register_types();
    return std::shared_ptr<application>{new application{}};
  }

  auto application::run(int argc, char * argv[]) -> int
  {
    return g_application_run(G_APPLICATION(m_adw), argc, argv);
  }

  application::application()
  {
    m_adw = adw_application_new("ch.arknet.Turns", G_APPLICATION_DEFAULT_FLAGS);
    m_application = Glib::wrap(GTK_APPLICATION(m_adw));

    m_application->signal_activate().connect(sigc::mem_fun(*this, &application::on_activate));
    m_application->signal_shutdown().connect(sigc::mem_fun(*this, &application::on_shutdown));
    m_application->signal_startup().connect(sigc::mem_fun(*this, &application::on_startup));
  }

  auto application::handle_action_quit() -> void
  {
    m_tracker->close();
  }

  auto application::on_activate() -> void
  {
    auto builder = Gtk::Builder::create_from_resource("/windows/tracker.ui");
    m_tracker = Gtk::Builder::get_widget_derived<ui::windows::tracker>(builder, "tracker");

    m_application->add_window(*m_tracker);
    m_tracker->present();
  }

  auto application::on_shutdown() -> void
  {
    m_tracker->close();
    delete m_tracker;
  }

  auto application::on_startup() -> void
  {
    auto style_manager = adw_style_manager_get_default();
    adw_style_manager_set_color_scheme(style_manager, ADW_COLOR_SCHEME_PREFER_LIGHT);

    m_application->add_action("quit", sigc::mem_fun(*this, &application::handle_action_quit));
    m_application->set_accel_for_action("app.quit", "<Primary>q");
    m_application->set_accel_for_action("win.clear", "<Primary>x");
    m_application->set_accel_for_action("win.next", "<Primary>space");
    m_application->set_accel_for_action("win.previous", "<Primary>BackSpace");
    m_application->set_accel_for_action("win.add_participant", "<Primary>a");
  }

}  // namespace turns::app