Merge pull request #72 from Robinhuett/custom_module_states
Custom modules can control tooltip and CSS classpull/75/head
commit
0670225e69
|
@ -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_;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
if (text_ == tooltip_) {
|
||||||
label_.set_tooltip_text(str);
|
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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue