-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapp_menu.cpp
64 lines (54 loc) · 2.28 KB
/
app_menu.cpp
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
#include "app_menu.h"
#include <glibmm.h>
#include <gtkmm.h>
void run() {}
AppMenu::AppMenu(std::shared_ptr<Indicator> indicator)
: m_performance_menu_item("Performance"), m_balanced_menu_item("Balanced"),
m_power_saver_menu_item("Power Saver"), m_group1(),
m_power_profile_manager(), m_current_profile("balanced") {
auto profiles_available = m_power_profile_manager.get_all();
m_indicator = indicator;
m_balanced_menu_item.set_group(m_group1);
m_power_saver_menu_item.set_group(m_group1);
m_performance_menu_item.set_group(m_group1);
if (std::find(profiles_available.begin(), profiles_available.end(),
"balanced") != profiles_available.end())
add(m_balanced_menu_item);
if (std::find(profiles_available.begin(), profiles_available.end(),
"power-saver") != profiles_available.end())
add(m_power_saver_menu_item);
if (std::find(profiles_available.begin(), profiles_available.end(),
"performance") != profiles_available.end())
add(m_performance_menu_item);
this->update();
Glib::signal_timeout().connect(
[this]() {
auto active_profile = this->m_power_profile_manager.get_profile();
if (this->m_current_profile != active_profile) {
this->m_current_profile = active_profile;
this->update();
}
return true;
},
1000);
show_all();
m_balanced_menu_item.signal_activate().connect(
[this]() { this->m_power_profile_manager.set_profile("balanced"); });
m_power_saver_menu_item.signal_activate().connect(
[this]() { this->m_power_profile_manager.set_profile("power-saver"); });
m_performance_menu_item.signal_activate().connect(
[this]() { this->m_power_profile_manager.set_profile("performance"); });
}
AppMenu::~AppMenu() {}
void AppMenu::update() {
if (this->m_current_profile == "balanced") {
m_indicator.get()->change_icon("speedometer");
this->m_balanced_menu_item.set_active();
} else if (this->m_current_profile == "power-saver") {
m_indicator.get()->change_icon("battery-profile-powersave");
this->m_power_saver_menu_item.set_active();
} else if (this->m_current_profile == "performance") {
m_indicator.get()->change_icon("battery-profile-performance");
this->m_performance_menu_item.set_active();
}
}