|
|
@@ -309,34 +309,7 @@ struct BrandItem : ui::MenuItem { |
|
|
|
struct BrandButton : ui::ChoiceButton { |
|
|
|
ModuleBrowser* browser; |
|
|
|
|
|
|
|
void onAction(const event::Action& e) override { |
|
|
|
ui::Menu* menu = createMenu(); |
|
|
|
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); |
|
|
|
menu->box.size.x = box.size.x; |
|
|
|
|
|
|
|
BrandItem* noneItem = new BrandItem; |
|
|
|
noneItem->text = "All brands"; |
|
|
|
noneItem->brand = ""; |
|
|
|
noneItem->browser = browser; |
|
|
|
menu->addChild(noneItem); |
|
|
|
|
|
|
|
menu->addChild(new ui::MenuSeparator); |
|
|
|
|
|
|
|
// Collect brands from all plugins |
|
|
|
std::set<std::string, string::CaseInsensitiveCompare> brands; |
|
|
|
for (plugin::Plugin* plugin : plugin::plugins) { |
|
|
|
brands.insert(plugin->brand); |
|
|
|
} |
|
|
|
|
|
|
|
for (const std::string& brand : brands) { |
|
|
|
BrandItem* brandItem = new BrandItem; |
|
|
|
brandItem->text = brand; |
|
|
|
brandItem->brand = brand; |
|
|
|
brandItem->browser = browser; |
|
|
|
menu->addChild(brandItem); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void onAction(const event::Action& e) override; |
|
|
|
void step() override; |
|
|
|
}; |
|
|
|
|
|
|
@@ -352,29 +325,7 @@ struct TagItem : ui::MenuItem { |
|
|
|
struct TagButton : ui::ChoiceButton { |
|
|
|
ModuleBrowser* browser; |
|
|
|
|
|
|
|
void onAction(const event::Action& e) override { |
|
|
|
ui::Menu* menu = createMenu(); |
|
|
|
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); |
|
|
|
menu->box.size.x = box.size.x; |
|
|
|
|
|
|
|
TagItem* noneItem = new TagItem; |
|
|
|
noneItem->text = "All tags"; |
|
|
|
noneItem->tagId = -1; |
|
|
|
noneItem->browser = browser; |
|
|
|
menu->addChild(noneItem); |
|
|
|
|
|
|
|
menu->addChild(createMenuLabel(RACK_MOD_CTRL_NAME "+click to select multiple")); |
|
|
|
menu->addChild(new ui::MenuSeparator); |
|
|
|
|
|
|
|
for (int tagId = 0; tagId < (int) tag::tagAliases.size(); tagId++) { |
|
|
|
TagItem* tagItem = new TagItem; |
|
|
|
tagItem->text = tag::getTag(tagId); |
|
|
|
tagItem->tagId = tagId; |
|
|
|
tagItem->browser = browser; |
|
|
|
menu->addChild(tagItem); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void onAction(const event::Action& e) override; |
|
|
|
void step() override; |
|
|
|
}; |
|
|
|
|
|
|
@@ -446,7 +397,7 @@ struct ZoomButton : ui::ChoiceButton { |
|
|
|
|
|
|
|
for (float zoom = 0.f; zoom >= -2.f; zoom -= 0.5f) { |
|
|
|
ZoomItem* sortItem = new ZoomItem; |
|
|
|
sortItem->text = string::f("%.2g%%", std::pow(2.f, zoom) * 100.f); |
|
|
|
sortItem->text = string::f("%.3g%%", std::pow(2.f, zoom) * 100.f); |
|
|
|
sortItem->zoom = zoom; |
|
|
|
sortItem->browser = browser; |
|
|
|
menu->addChild(sortItem); |
|
|
@@ -455,7 +406,7 @@ struct ZoomButton : ui::ChoiceButton { |
|
|
|
|
|
|
|
void step() override { |
|
|
|
text = "Zoom: "; |
|
|
|
text += string::f("%.2g%%", std::pow(2.f, settings::moduleBrowserZoom) * 100.f); |
|
|
|
text += string::f("%.3g%%", std::pow(2.f, settings::moduleBrowserZoom) * 100.f); |
|
|
|
ChoiceButton::step(); |
|
|
|
} |
|
|
|
}; |
|
|
@@ -813,6 +764,35 @@ inline void BrandItem::step() { |
|
|
|
MenuItem::step(); |
|
|
|
} |
|
|
|
|
|
|
|
inline void BrandButton::onAction(const event::Action& e) { |
|
|
|
ui::Menu* menu = createMenu(); |
|
|
|
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); |
|
|
|
menu->box.size.x = box.size.x; |
|
|
|
|
|
|
|
BrandItem* noneItem = new BrandItem; |
|
|
|
noneItem->text = "All brands"; |
|
|
|
noneItem->brand = ""; |
|
|
|
noneItem->browser = browser; |
|
|
|
menu->addChild(noneItem); |
|
|
|
|
|
|
|
menu->addChild(new ui::MenuSeparator); |
|
|
|
|
|
|
|
// Collect brands from all plugins |
|
|
|
std::set<std::string, string::CaseInsensitiveCompare> brands; |
|
|
|
for (plugin::Plugin* plugin : plugin::plugins) { |
|
|
|
brands.insert(plugin->brand); |
|
|
|
} |
|
|
|
|
|
|
|
for (const std::string& brand : brands) { |
|
|
|
BrandItem* brandItem = new BrandItem; |
|
|
|
brandItem->text = brand; |
|
|
|
brandItem->brand = brand; |
|
|
|
brandItem->browser = browser; |
|
|
|
brandItem->disabled = !browser->hasVisibleModel(brand, browser->tagIds); |
|
|
|
menu->addChild(brandItem); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
inline void BrandButton::step() { |
|
|
|
text = "Brand"; |
|
|
|
if (!browser->brand.empty()) { |
|
|
@@ -868,6 +848,30 @@ inline void TagItem::step() { |
|
|
|
MenuItem::step(); |
|
|
|
} |
|
|
|
|
|
|
|
inline void TagButton::onAction(const event::Action& e) { |
|
|
|
ui::Menu* menu = createMenu(); |
|
|
|
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); |
|
|
|
menu->box.size.x = box.size.x; |
|
|
|
|
|
|
|
TagItem* noneItem = new TagItem; |
|
|
|
noneItem->text = "All tags"; |
|
|
|
noneItem->tagId = -1; |
|
|
|
noneItem->browser = browser; |
|
|
|
menu->addChild(noneItem); |
|
|
|
|
|
|
|
menu->addChild(createMenuLabel(RACK_MOD_CTRL_NAME "+click to select multiple")); |
|
|
|
menu->addChild(new ui::MenuSeparator); |
|
|
|
|
|
|
|
for (int tagId = 0; tagId < (int) tag::tagAliases.size(); tagId++) { |
|
|
|
TagItem* tagItem = new TagItem; |
|
|
|
tagItem->text = tag::getTag(tagId); |
|
|
|
tagItem->tagId = tagId; |
|
|
|
tagItem->browser = browser; |
|
|
|
tagItem->disabled = !browser->hasVisibleModel(browser->brand, {tagId}); |
|
|
|
menu->addChild(tagItem); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
inline void TagButton::step() { |
|
|
|
text = "Tags"; |
|
|
|
if (!browser->tagIds.empty()) { |
|
|
|