BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

menu.hpp (1202B)


      1 #pragma once
      2 
      3 #include <functional>
      4 #include "rack.hpp"
      5 
      6 using namespace rack;
      7 
      8 namespace bogaudio {
      9 
     10 struct OptionMenuItem : MenuItem {
     11 	std::function<bool()> _check;
     12 	std::function<void()> _set;
     13 
     14 	OptionMenuItem(const char* label, std::function<bool()> check, std::function<void()> set)
     15 	: _check(check)
     16 	, _set(set)
     17 	{
     18 		this->text = label;
     19 	}
     20 
     21 	void onAction(const event::Action& e) override {
     22 		_set();
     23 	}
     24 
     25 	void step() override {
     26 		MenuItem::step();
     27 		rightText = _check() ? "✔" : "";
     28 	}
     29 };
     30 
     31 struct BoolOptionMenuItem : OptionMenuItem {
     32 	BoolOptionMenuItem(const char* label, std::function<bool*()> get)
     33 	: OptionMenuItem(label, [=]() { return *(get()); }, [=]() { bool* b = get(); *b = !*b; })
     34 	{}
     35 };
     36 
     37 struct SpacerOptionMenuItem : OptionMenuItem {
     38 	SpacerOptionMenuItem()
     39 	: OptionMenuItem("<spacer>", []() { return false; }, []() {})
     40 	{}
     41 };
     42 
     43 struct OptionsMenuItem : MenuItem {
     44 	std::vector<OptionMenuItem> _items;
     45 
     46 	OptionsMenuItem(const char* label) {
     47 		this->text = label;
     48 		this->rightText = "▸";
     49 	}
     50 
     51 	void addItem(const OptionMenuItem& item);
     52 	void addSpacer();
     53 	Menu* createChildMenu() override;
     54 	static void addToMenu(OptionsMenuItem* item, Menu* menu);
     55 };
     56 
     57 } // namespace bogaudio