From f27f5d48d85630b23e5711efa98521092b7918e6 Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Sun, 10 Oct 2021 05:17:50 -0400 Subject: [PATCH] Use createCheckMenuItem() etc in Browser. --- src/app/Browser.cpp | 86 ++++++++++++++++----------------------------- src/app/MenuBar.cpp | 31 +++++++--------- 2 files changed, 44 insertions(+), 73 deletions(-) diff --git a/src/app/Browser.cpp b/src/app/Browser.cpp index 226ee23b..94042531 100644 --- a/src/app/Browser.cpp +++ b/src/app/Browser.cpp @@ -390,33 +390,10 @@ static const std::string sortNames[] = { }; -struct SortItem : ui::MenuItem { - Browser* browser; - settings::BrowserSort sort; - void onAction(const ActionEvent& e) override; - void step() override { - rightText = CHECKMARK(settings::browserSort == sort); - MenuItem::step(); - } -}; - - struct SortButton : ui::ChoiceButton { Browser* browser; - void onAction(const ActionEvent& e) override { - ui::Menu* menu = createMenu(); - menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); - menu->box.size.x = box.size.x; - - for (int sortId = 0; sortId <= settings::BROWSER_SORT_RANDOM; sortId++) { - SortItem* sortItem = new SortItem; - sortItem->text = sortNames[sortId]; - sortItem->sort = (settings::BrowserSort) sortId; - sortItem->browser = browser; - menu->addChild(sortItem); - } - } + void onAction(const ActionEvent& e) override; void step() override { text = "Sort: "; @@ -426,33 +403,10 @@ struct SortButton : ui::ChoiceButton { }; -struct ZoomItem : ui::MenuItem { - Browser* browser; - float zoom; - void onAction(const ActionEvent& e) override; - void step() override { - rightText = CHECKMARK(settings::browserZoom == zoom); - MenuItem::step(); - } -}; - - struct ZoomButton : ui::ChoiceButton { Browser* browser; - void onAction(const ActionEvent& e) override { - ui::Menu* menu = createMenu(); - menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); - menu->box.size.x = box.size.x; - - for (float zoom = 1.f; zoom >= -2.f; zoom -= 0.5f) { - ZoomItem* sortItem = new ZoomItem; - sortItem->text = string::f("%.0f%%", std::pow(2.f, zoom) * 100.f); - sortItem->zoom = zoom; - sortItem->browser = browser; - menu->addChild(sortItem); - } - } + void onAction(const ActionEvent& e) override; void step() override { text = "Zoom: "; @@ -994,15 +948,37 @@ inline void TagButton::step() { ChoiceButton::step(); } -inline void SortItem::onAction(const ActionEvent& e) { - settings::browserSort = sort; - browser->refresh(); +inline void SortButton::onAction(const ActionEvent& e) { + ui::Menu* menu = createMenu(); + menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); + menu->box.size.x = box.size.x; + + for (int sortId = 0; sortId <= settings::BROWSER_SORT_RANDOM; sortId++) { + menu->addChild(createCheckMenuItem(sortNames[sortId], "", + [=]() {return settings::browserSort == sortId;}, + [=]() { + settings::browserSort = (settings::BrowserSort) sortId; + browser->refresh(); + } + )); + } } -inline void ZoomItem::onAction(const ActionEvent& e) { - if (zoom != settings::browserZoom) { - settings::browserZoom = zoom; - browser->updateZoom(); +inline void ZoomButton::onAction(const ActionEvent& e) { + ui::Menu* menu = createMenu(); + menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); + menu->box.size.x = box.size.x; + + for (float zoom = 1.f; zoom >= -2.f; zoom -= 0.5f) { + menu->addChild(createCheckMenuItem(string::f("%.0f%%", std::pow(2.f, zoom) * 100.f), "", + [=]() {return settings::browserZoom == zoom;}, + [=]() { + if (zoom == settings::browserZoom) + return; + settings::browserZoom = zoom; + browser->updateZoom(); + } + )); } } diff --git a/src/app/MenuBar.cpp b/src/app/MenuBar.cpp index dc70b055..b4d36afd 100644 --- a/src/app/MenuBar.cpp +++ b/src/app/MenuBar.cpp @@ -469,11 +469,11 @@ struct SampleRateItem : ui::MenuItem { if (settings::sampleRate == 0) { float sampleRate = APP->engine->getSampleRate(); rightText += string::f("(%g kHz) ", sampleRate / 1000.f); - rightText += CHECKMARK_STRING; } - menu->addChild(createMenuItem("Auto", rightText, [=]() { - settings::sampleRate = 0; - })); + menu->addChild(createCheckMenuItem("Auto", rightText, + [=]() {return settings::sampleRate == 0;}, + [=]() {settings::sampleRate = 0;} + )); // Power-of-2 oversample times 44.1kHz or 48kHz for (int i = -2; i <= 4; i++) { @@ -490,11 +490,10 @@ struct SampleRateItem : ui::MenuItem { else if (oversample < 1.f) { rightText += string::f("(1/%.0fx)", 1.f / oversample); } - rightText += " "; - rightText += CHECKMARK(settings::sampleRate == sampleRate); - menu->addChild(createMenuItem(text, rightText, [=]() { - settings::sampleRate = sampleRate; - })); + menu->addChild(createCheckMenuItem(text, rightText, + [=]() {return settings::sampleRate == sampleRate;}, + [=]() {settings::sampleRate = sampleRate;} + )); } } return menu; @@ -515,10 +514,7 @@ struct EngineButton : MenuButton { settings::cpuMeter ^= true; })); - SampleRateItem* sampleRateItem = new SampleRateItem; - sampleRateItem->text = "Sample rate"; - sampleRateItem->rightText = RIGHT_ARROW; - menu->addChild(sampleRateItem); + menu->addChild(createMenuItem("Sample rate", RIGHT_ARROW)); menu->addChild(createSubmenuItem("Threads", string::f("%d", settings::threadCount), [=](ui::Menu* menu) { // BUG This assumes SMT is enabled. @@ -530,11 +526,10 @@ struct EngineButton : MenuButton { rightText += "(most modules)"; else if (i == 1) rightText += "(lowest CPU usage)"; - if (settings::threadCount == i) - rightText += " " CHECKMARK_STRING; - menu->addChild(createMenuItem(string::f("%d", i), rightText, [=]() { - settings::threadCount = i; - })); + menu->addChild(createCheckMenuItem(string::f("%d", i), rightText, + [=]() {return settings::threadCount == i;}, + [=]() {settings::threadCount = i;} + )); } })); }