Browse Source

Make BrandItem and TagItem disabled if no results would be shown.

tags/v2.0.0
Andrew Belt 4 years ago
parent
commit
322bb0ea6b
1 changed files with 57 additions and 53 deletions
  1. +57
    -53
      src/app/ModuleBrowser.cpp

+ 57
- 53
src/app/ModuleBrowser.cpp View File

@@ -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()) {


Loading…
Cancel
Save