Merge pull request #72 from Robinhuett/custom_module_states

Custom modules can control tooltip and CSS class
pull/75/head
Alex 2018-11-01 09:11:15 +01:00 committed by GitHub
commit 0670225e69
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 66 additions and 2 deletions

View File

@ -4,6 +4,7 @@
#include <iostream> #include <iostream>
#include "util/chrono.hpp" #include "util/chrono.hpp"
#include "util/command.hpp" #include "util/command.hpp"
#include "util/json.hpp"
#include "ALabel.hpp" #include "ALabel.hpp"
namespace waybar::modules { namespace waybar::modules {
@ -15,10 +16,17 @@ class Custom : public ALabel {
private: private:
void delayWorker(); void delayWorker();
void continuousWorker(); void continuousWorker();
void parseOutputRaw();
void parseOutputJson();
const std::string name_; const std::string name_;
std::string text_;
std::string tooltip_;
std::string class_;
std::string prevclass_;
waybar::util::SleeperThread thread_; waybar::util::SleeperThread thread_;
waybar::util::command::res output_; waybar::util::command::res output_;
waybar::util::JsonParser parser_;
}; };
} }

View File

@ -72,9 +72,65 @@ auto waybar::modules::Custom::update() -> void
label_.set_name(""); label_.set_name("");
} else { } else {
label_.set_name("custom-" + name_); label_.set_name("custom-" + name_);
auto str = fmt::format(format_, output_.out);
if (config_["return-type"].asString() == "json") {
parseOutputJson();
} else {
parseOutputRaw();
}
auto str = fmt::format(format_, text_);
label_.set_text(str); label_.set_text(str);
label_.set_tooltip_text(str); if (text_ == tooltip_) {
label_.set_tooltip_text(str);
} else {
label_.set_tooltip_text(tooltip_);
}
if (class_ != "") {
if (prevclass_ != "") {
label_.get_style_context()->remove_class(prevclass_);
}
label_.get_style_context()->add_class(class_);
prevclass_ = class_;
} else {
label_.get_style_context()->remove_class(prevclass_);
prevclass_ = "";
}
label_.show(); label_.show();
} }
} }
void waybar::modules::Custom::parseOutputRaw()
{
std::istringstream output(output_.out);
std::string line;
int i = 0;
while (getline(output, line)) {
if (i == 0) {
text_ = line;
tooltip_ = line;
class_ = "";
} else if (i == 1) {
tooltip_ = line;
} else if (i == 2) {
class_ = line;
} else {
break;
}
i++;
}
}
void waybar::modules::Custom::parseOutputJson()
{
std::istringstream output(output_.out);
std::string line;
while (getline(output, line)) {
auto parsed = parser_.parse(line);
text_ = parsed["text"].asString();
tooltip_ = parsed["tooltip"].asString();
class_ = parsed["class"].asString();
break;
}
}