mirror of
https://github.com/polybar/polybar.git
synced 2024-11-11 13:50:56 -05:00
d592eea966
This allows us to identify module by their type and it is also better to store the module type as part of the module instead of having it hardcoded in factory.hpp
49 lines
1 KiB
C++
49 lines
1 KiB
C++
#pragma once
|
|
|
|
#include "modules/meta/static_module.hpp"
|
|
|
|
POLYBAR_NS
|
|
|
|
namespace modules {
|
|
class menu_module : public static_module<menu_module> {
|
|
public:
|
|
struct menu_tree_item {
|
|
string exec;
|
|
label_t label;
|
|
};
|
|
|
|
struct menu_tree {
|
|
vector<unique_ptr<menu_tree_item>> items;
|
|
};
|
|
|
|
public:
|
|
explicit menu_module(const bar_settings&, string);
|
|
|
|
bool build(builder* builder, const string& tag) const;
|
|
void update() {}
|
|
|
|
static constexpr auto TYPE = "custom/menu";
|
|
|
|
protected:
|
|
bool input(string&& cmd);
|
|
|
|
private:
|
|
static constexpr auto TAG_LABEL_TOGGLE = "<label-toggle>";
|
|
static constexpr auto TAG_MENU = "<menu>";
|
|
|
|
static constexpr auto EVENT_MENU_OPEN = "menu-open-";
|
|
static constexpr auto EVENT_MENU_CLOSE = "menu-close";
|
|
|
|
bool m_expand_right{true};
|
|
|
|
label_t m_labelopen;
|
|
label_t m_labelclose;
|
|
label_t m_labelseparator;
|
|
|
|
vector<unique_ptr<menu_tree>> m_levels;
|
|
|
|
std::atomic<int> m_level{-1};
|
|
};
|
|
} // namespace modules
|
|
|
|
POLYBAR_NS_END
|