From 472363a6239397184270bbcaa0c3de60c6298ab5 Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 1 May 2019 22:28:48 -0400 Subject: [PATCH 1/5] feat(percent): adds a percent class to numeric modules --- include/modules/backlight.hpp | 2 ++ include/modules/battery.hpp | 1 + include/modules/cpu.hpp | 2 ++ src/modules/backlight.cpp | 5 +++++ src/modules/battery.cpp | 5 +++++ src/modules/cpu.cpp | 4 ++++ 6 files changed, 19 insertions(+) diff --git a/include/modules/backlight.hpp b/include/modules/backlight.hpp index 42e38f2a..6576ecc3 100644 --- a/include/modules/backlight.hpp +++ b/include/modules/backlight.hpp @@ -51,6 +51,8 @@ class Backlight : public ALabel { const std::string preferred_device_; static constexpr int EPOLL_MAX_EVENTS = 16; + std::string old_percent_; + std::optional previous_best_; std::string previous_format_; diff --git a/include/modules/battery.hpp b/include/modules/battery.hpp index 4b397446..09601f7b 100644 --- a/include/modules/battery.hpp +++ b/include/modules/battery.hpp @@ -43,6 +43,7 @@ class Battery : public ALabel { int fd_; std::vector wds_; std::string old_status_; + std::string old_capacity_; }; } // namespace waybar::modules diff --git a/include/modules/cpu.hpp b/include/modules/cpu.hpp index 5c17d3a4..c7aa1958 100644 --- a/include/modules/cpu.hpp +++ b/include/modules/cpu.hpp @@ -23,6 +23,8 @@ class Cpu : public ALabel { std::tuple getCpuUsage(); std::vector> parseCpuinfo(); + std::string old_usage_; + std::vector> prev_times_; waybar::util::SleeperThread thread_; }; diff --git a/src/modules/backlight.cpp b/src/modules/backlight.cpp index ea09b4ef..576c6823 100644 --- a/src/modules/backlight.cpp +++ b/src/modules/backlight.cpp @@ -179,8 +179,13 @@ auto waybar::modules::Backlight::update() -> void { } const auto percent = best->get_max() == 0 ? 100 : best->get_actual() * 100 / best->get_max(); + const auto percentClass = "percent" + std::to_string(int(std::ceil(percent/5)*5)); + label_.set_markup(fmt::format( format_, fmt::arg("percent", std::to_string(percent)), fmt::arg("icon", getIcon(percent)))); + label_.get_style_context()->remove_class(old_percent_); + label_.get_style_context()->add_class(percentClass); + old_percent_ = percentClass; } else { if (!previous_best_.has_value()) { return; diff --git a/src/modules/battery.cpp b/src/modules/battery.cpp index f2e6a88c..148865e6 100644 --- a/src/modules/battery.cpp +++ b/src/modules/battery.cpp @@ -144,8 +144,13 @@ auto waybar::modules::Battery::update() -> void { std::transform(status.begin(), status.end(), status.begin(), ::tolower); auto format = format_; auto state = getState(capacity); + auto capacity_class = "percent" + std::to_string(int(std::ceil(capacity/5)*5)); label_.get_style_context()->remove_class(old_status_); + label_.get_style_context()->remove_class(old_capacity_); label_.get_style_context()->add_class(status); + label_.get_style_context()->add_class(capacity_class); + old_capacity_ = capacity_class; + std::cout << fmt::format(capacity_class); old_status_ = status; if (!state.empty() && config_["format-" + status + "-" + state].isString()) { format = config_["format-" + status + "-" + state].asString(); diff --git a/src/modules/cpu.cpp b/src/modules/cpu.cpp index 880a05a5..f0badf3e 100644 --- a/src/modules/cpu.cpp +++ b/src/modules/cpu.cpp @@ -19,7 +19,11 @@ auto waybar::modules::Cpu::update() -> void { if (tooltipEnabled()) { label_.set_tooltip_text(tooltip); } + auto percent_class = "percent" + std::to_string(int(std::ceil(cpu_usage/5)*5)); label_.set_markup(fmt::format(format_, fmt::arg("load", cpu_load), fmt::arg("usage", cpu_usage))); + label_.get_style_context()->remove_class(old_usage_); + label_.get_style_context()->add_class(percent_class); + old_usage_ = percent_class; } uint16_t waybar::modules::Cpu::getCpuLoad() { From e158a3e1324e610ae48bbfc85d551beac2e9dd5f Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 2 May 2019 21:39:34 -0400 Subject: [PATCH 2/5] feat(states): add generic 'states' to all labels --- include/ALabel.hpp | 1 + include/modules/battery.hpp | 2 +- src/ALabel.cpp | 24 ++++++++++++++++++++++++ src/modules/battery.cpp | 24 +----------------------- 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/include/ALabel.hpp b/include/ALabel.hpp index a6a9a5f1..d4d10878 100644 --- a/include/ALabel.hpp +++ b/include/ALabel.hpp @@ -31,6 +31,7 @@ class ALabel : public IModule { virtual bool handleToggle(GdkEventButton *const &ev); virtual bool handleScroll(GdkEventScroll *); + virtual std::string getState(uint8_t value); private: std::vector pid_; diff --git a/include/modules/battery.hpp b/include/modules/battery.hpp index 09601f7b..f57170f5 100644 --- a/include/modules/battery.hpp +++ b/include/modules/battery.hpp @@ -34,7 +34,7 @@ class Battery : public ALabel { void worker(); const std::string getAdapterStatus(uint8_t capacity) const; const std::tuple getInfos() const; - const std::string getState(uint8_t) const; + // const std::string getState(uint8_t) const; util::SleeperThread thread_; util::SleeperThread thread_timer_; diff --git a/src/ALabel.cpp b/src/ALabel.cpp index a42bea74..9435e03b 100644 --- a/src/ALabel.cpp +++ b/src/ALabel.cpp @@ -129,6 +129,30 @@ std::string waybar::ALabel::getIcon(uint16_t percentage, const std::string& alt) return ""; } +std::string waybar::ALabel::getState(uint8_t value) { + // Get current state + std::vector> states; + if (config_["states"].isObject()) { + for (auto it = config_["states"].begin(); it != config_["states"].end(); ++it) { + if (it->isUInt() && it.key().isString()) { + states.emplace_back(it.key().asString(), it->asUInt()); + } + } + } + // Sort states + std::sort(states.begin(), states.end(), [](auto& a, auto& b) { return a.second < b.second; }); + std::string valid_state; + for (auto const& state : states) { + if (value <= state.second && valid_state.empty()) { + label_.get_style_context()->add_class(state.first); + valid_state = state.first; + } else { + label_.get_style_context()->remove_class(state.first); + } + } + return valid_state; +} + bool waybar::ALabel::tooltipEnabled() { return config_["tooltip"].isBool() ? config_["tooltip"].asBool() : true; } diff --git a/src/modules/battery.cpp b/src/modules/battery.cpp index 148865e6..785b9071 100644 --- a/src/modules/battery.cpp +++ b/src/modules/battery.cpp @@ -109,29 +109,7 @@ const std::string waybar::modules::Battery::getAdapterStatus(uint8_t capacity) c return "Unknown"; } -const std::string waybar::modules::Battery::getState(uint8_t capacity) const { - // Get current state - std::vector> states; - if (config_["states"].isObject()) { - for (auto it = config_["states"].begin(); it != config_["states"].end(); ++it) { - if (it->isUInt() && it.key().isString()) { - states.emplace_back(it.key().asString(), it->asUInt()); - } - } - } - // Sort states - std::sort(states.begin(), states.end(), [](auto& a, auto& b) { return a.second < b.second; }); - std::string valid_state; - for (auto const& state : states) { - if (capacity <= state.second && valid_state.empty()) { - label_.get_style_context()->add_class(state.first); - valid_state = state.first; - } else { - label_.get_style_context()->remove_class(state.first); - } - } - return valid_state; -} + auto waybar::modules::Battery::update() -> void { auto [capacity, status] = getInfos(); From 3bac96945cb63c7432320edf74102348610b88c8 Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 2 May 2019 21:39:45 -0400 Subject: [PATCH 3/5] Revert "feat(percent): adds a percent class to numeric modules" This reverts commit 82302e58f3b611f7ff6d686d1783b1c32914f7c9. --- include/modules/backlight.hpp | 2 -- include/modules/battery.hpp | 1 - include/modules/cpu.hpp | 2 -- src/modules/backlight.cpp | 5 ----- src/modules/battery.cpp | 5 ----- src/modules/cpu.cpp | 4 ---- 6 files changed, 19 deletions(-) diff --git a/include/modules/backlight.hpp b/include/modules/backlight.hpp index 6576ecc3..42e38f2a 100644 --- a/include/modules/backlight.hpp +++ b/include/modules/backlight.hpp @@ -51,8 +51,6 @@ class Backlight : public ALabel { const std::string preferred_device_; static constexpr int EPOLL_MAX_EVENTS = 16; - std::string old_percent_; - std::optional previous_best_; std::string previous_format_; diff --git a/include/modules/battery.hpp b/include/modules/battery.hpp index f57170f5..df3c1be0 100644 --- a/include/modules/battery.hpp +++ b/include/modules/battery.hpp @@ -43,7 +43,6 @@ class Battery : public ALabel { int fd_; std::vector wds_; std::string old_status_; - std::string old_capacity_; }; } // namespace waybar::modules diff --git a/include/modules/cpu.hpp b/include/modules/cpu.hpp index c7aa1958..5c17d3a4 100644 --- a/include/modules/cpu.hpp +++ b/include/modules/cpu.hpp @@ -23,8 +23,6 @@ class Cpu : public ALabel { std::tuple getCpuUsage(); std::vector> parseCpuinfo(); - std::string old_usage_; - std::vector> prev_times_; waybar::util::SleeperThread thread_; }; diff --git a/src/modules/backlight.cpp b/src/modules/backlight.cpp index 576c6823..ea09b4ef 100644 --- a/src/modules/backlight.cpp +++ b/src/modules/backlight.cpp @@ -179,13 +179,8 @@ auto waybar::modules::Backlight::update() -> void { } const auto percent = best->get_max() == 0 ? 100 : best->get_actual() * 100 / best->get_max(); - const auto percentClass = "percent" + std::to_string(int(std::ceil(percent/5)*5)); - label_.set_markup(fmt::format( format_, fmt::arg("percent", std::to_string(percent)), fmt::arg("icon", getIcon(percent)))); - label_.get_style_context()->remove_class(old_percent_); - label_.get_style_context()->add_class(percentClass); - old_percent_ = percentClass; } else { if (!previous_best_.has_value()) { return; diff --git a/src/modules/battery.cpp b/src/modules/battery.cpp index 785b9071..8028531e 100644 --- a/src/modules/battery.cpp +++ b/src/modules/battery.cpp @@ -122,13 +122,8 @@ auto waybar::modules::Battery::update() -> void { std::transform(status.begin(), status.end(), status.begin(), ::tolower); auto format = format_; auto state = getState(capacity); - auto capacity_class = "percent" + std::to_string(int(std::ceil(capacity/5)*5)); label_.get_style_context()->remove_class(old_status_); - label_.get_style_context()->remove_class(old_capacity_); label_.get_style_context()->add_class(status); - label_.get_style_context()->add_class(capacity_class); - old_capacity_ = capacity_class; - std::cout << fmt::format(capacity_class); old_status_ = status; if (!state.empty() && config_["format-" + status + "-" + state].isString()) { format = config_["format-" + status + "-" + state].asString(); diff --git a/src/modules/cpu.cpp b/src/modules/cpu.cpp index f0badf3e..880a05a5 100644 --- a/src/modules/cpu.cpp +++ b/src/modules/cpu.cpp @@ -19,11 +19,7 @@ auto waybar::modules::Cpu::update() -> void { if (tooltipEnabled()) { label_.set_tooltip_text(tooltip); } - auto percent_class = "percent" + std::to_string(int(std::ceil(cpu_usage/5)*5)); label_.set_markup(fmt::format(format_, fmt::arg("load", cpu_load), fmt::arg("usage", cpu_usage))); - label_.get_style_context()->remove_class(old_usage_); - label_.get_style_context()->add_class(percent_class); - old_usage_ = percent_class; } uint16_t waybar::modules::Cpu::getCpuLoad() { From 5f0a3063d1c1a1286e8dc601dc9f11021348ae9f Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 2 May 2019 22:19:47 -0400 Subject: [PATCH 4/5] feat(states): add getState to other percent based modules --- src/modules/backlight.cpp | 1 + src/modules/cpu.cpp | 1 + src/modules/memory.cpp | 1 + src/modules/network.cpp | 1 + src/modules/pulseaudio.cpp | 1 + 5 files changed, 5 insertions(+) diff --git a/src/modules/backlight.cpp b/src/modules/backlight.cpp index ea09b4ef..76892996 100644 --- a/src/modules/backlight.cpp +++ b/src/modules/backlight.cpp @@ -181,6 +181,7 @@ auto waybar::modules::Backlight::update() -> void { const auto percent = best->get_max() == 0 ? 100 : best->get_actual() * 100 / best->get_max(); label_.set_markup(fmt::format( format_, fmt::arg("percent", std::to_string(percent)), fmt::arg("icon", getIcon(percent)))); + getState(percent); } else { if (!previous_best_.has_value()) { return; diff --git a/src/modules/cpu.cpp b/src/modules/cpu.cpp index 880a05a5..7c75cb90 100644 --- a/src/modules/cpu.cpp +++ b/src/modules/cpu.cpp @@ -20,6 +20,7 @@ auto waybar::modules::Cpu::update() -> void { label_.set_tooltip_text(tooltip); } label_.set_markup(fmt::format(format_, fmt::arg("load", cpu_load), fmt::arg("usage", cpu_usage))); + getState(cpu_usage); } uint16_t waybar::modules::Cpu::getCpuLoad() { diff --git a/src/modules/memory.cpp b/src/modules/memory.cpp index 1ebaef39..de5fb24a 100644 --- a/src/modules/memory.cpp +++ b/src/modules/memory.cpp @@ -16,6 +16,7 @@ auto waybar::modules::Memory::update() -> void { parseMeminfo(); if (memtotal_ > 0 && memfree_ >= 0) { int used_ram_percentage = 100 * (memtotal_ - memfree_) / memtotal_; + getState(used_ram_percentage); label_.set_markup(fmt::format(format_, used_ram_percentage)); auto used_ram_gigabytes = (memtotal_ - memfree_) / std::pow(1024, 2); if (tooltipEnabled()) { diff --git a/src/modules/network.cpp b/src/modules/network.cpp index 0a041db1..94f34cd0 100644 --- a/src/modules/network.cpp +++ b/src/modules/network.cpp @@ -170,6 +170,7 @@ auto waybar::modules::Network::update() -> void { if (!alt_) { format_ = default_format_; } + getState(signal_strength_); auto text = fmt::format(format_, fmt::arg("essid", essid_), fmt::arg("signaldBm", signal_strength_dbm_), diff --git a/src/modules/pulseaudio.cpp b/src/modules/pulseaudio.cpp index ed2fd67c..3c768445 100644 --- a/src/modules/pulseaudio.cpp +++ b/src/modules/pulseaudio.cpp @@ -202,6 +202,7 @@ auto waybar::modules::Pulseaudio::update() -> void { } label_.set_markup(fmt::format( format, fmt::arg("volume", volume_), fmt::arg("icon", getIcon(volume_, getPortIcon())))); + getState(volume_); if (tooltipEnabled()) { label_.set_tooltip_text(desc_); } From dd0ebe117c70840b034e26bf55026557cd4d7161 Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 3 May 2019 08:08:55 -0400 Subject: [PATCH 5/5] chore(cr): cr cleanup --- include/modules/battery.hpp | 1 - src/modules/battery.cpp | 2 -- 2 files changed, 3 deletions(-) diff --git a/include/modules/battery.hpp b/include/modules/battery.hpp index df3c1be0..9787a8dc 100644 --- a/include/modules/battery.hpp +++ b/include/modules/battery.hpp @@ -34,7 +34,6 @@ class Battery : public ALabel { void worker(); const std::string getAdapterStatus(uint8_t capacity) const; const std::tuple getInfos() const; - // const std::string getState(uint8_t) const; util::SleeperThread thread_; util::SleeperThread thread_timer_; diff --git a/src/modules/battery.cpp b/src/modules/battery.cpp index 8028531e..607efdd4 100644 --- a/src/modules/battery.cpp +++ b/src/modules/battery.cpp @@ -109,8 +109,6 @@ const std::string waybar::modules::Battery::getAdapterStatus(uint8_t capacity) c return "Unknown"; } - - auto waybar::modules::Battery::update() -> void { auto [capacity, status] = getInfos(); if (status == "Unknown") {