Browse Source

Using a pop-up menu for zoom choices

pull/1454/head
Fabrizio DUHEM 5 years ago
parent
commit
af20916ea7
1 changed files with 54 additions and 14 deletions
  1. +54
    -14
      src/app/ModuleBrowser.cpp

+ 54
- 14
src/app/ModuleBrowser.cpp View File

@@ -15,7 +15,6 @@
#include <ui/ChoiceButton.hpp> #include <ui/ChoiceButton.hpp>
#include <ui/Tooltip.hpp> #include <ui/Tooltip.hpp>
#include <ui/Slider.hpp> #include <ui/Slider.hpp>

#include <app/ModuleWidget.hpp> #include <app/ModuleWidget.hpp>
#include <app/Scene.hpp> #include <app/Scene.hpp>
#include <plugin.hpp> #include <plugin.hpp>
@@ -27,7 +26,6 @@
#include <set> #include <set>
#include <algorithm> #include <algorithm>



namespace rack { namespace rack {
namespace app { namespace app {


@@ -447,17 +445,62 @@ struct ModuleBrowserZoomQuantity : Quantity
std::string getUnit() override { return "%"; } std::string getUnit() override { return "%"; }
}; };


struct ModuleBrowserZoomSlider : ui::Slider
struct ZoomItem : public ui::MenuItem
{
float value;
Quantity *quantity;

ZoomItem(std::string text, float value, Quantity *quantity)
: value(value)
, quantity(quantity)
{
this->text = text;
this->setSize(math::Vec(60, 30));
}
void onAction(const event::Action &e) override
{
quantity->setValue(value);
}
};

struct ModuleBrowserZoomButton : ui::ChoiceButton
{ {
ModuleBrowserZoomSlider()
ModuleBrowserZoomButton()
{ {
quantity = new ModuleBrowserZoomQuantity;
quantity = new ModuleBrowserZoomQuantity;
} }


~ModuleBrowserZoomSlider()
~ModuleBrowserZoomButton()
{ {
delete quantity; delete quantity;
} }

void onDragStart(const event::DragStart &e) override
{
}

void onDragEnd(const event::DragEnd &e) override
{
}

void onAction(const event::Action &e) override
{
auto menu = createMenu();

menu->setSize(math::Vec(200, 200));
menu->addChild(new ZoomItem("50%", 0.5f, quantity));
menu->addChild(new ZoomItem("75%", 0.75f, quantity));
menu->addChild(new ZoomItem("100%", 1.0f, quantity));
menu->addChild(new ZoomItem("125%", 1.25f, quantity));
menu->addChild(new ZoomItem("150%", 1.5f, quantity));
menu->addChild(new ZoomItem("175%", 1.75f, quantity));
menu->addChild(new ZoomItem("200%", 2.0f, quantity));
}

void step() override {
text = quantity->getString();
}
}; };


struct ModuleBrowser : widget::OpaqueWidget { struct ModuleBrowser : widget::OpaqueWidget {
@@ -466,7 +509,7 @@ struct ModuleBrowser : widget::OpaqueWidget {
ui::Label *modelLabel; ui::Label *modelLabel;
ui::MarginLayout *modelMargin; ui::MarginLayout *modelMargin;
ui::SequentialLayout *modelContainer; ui::SequentialLayout *modelContainer;
ModuleBrowserZoomSlider *moduleBrowserZoomSlider;
ModuleBrowserZoomButton *moduleBrowserZoomButton;


std::string search; std::string search;
std::string brand; std::string brand;
@@ -480,11 +523,8 @@ struct ModuleBrowser : widget::OpaqueWidget {
addChild(sidebar); addChild(sidebar);


modelLabel = new ui::Label; modelLabel = new ui::Label;
// modelLabel->fontSize = 16;
// modelLabel->box.size.x = 400;
addChild(modelLabel); addChild(modelLabel);


modelScroll = new ui::ScrollWidget; modelScroll = new ui::ScrollWidget;
addChild(modelScroll); addChild(modelScroll);


@@ -505,9 +545,9 @@ struct ModuleBrowser : widget::OpaqueWidget {
} }
} }


moduleBrowserZoomSlider = new ModuleBrowserZoomSlider();
moduleBrowserZoomSlider->box.size.x = 200;
addChild(moduleBrowserZoomSlider);
moduleBrowserZoomButton = new ModuleBrowserZoomButton();
moduleBrowserZoomButton->box.size.x = 200;
addChild(moduleBrowserZoomButton);


refresh(); refresh();
} }
@@ -517,7 +557,7 @@ struct ModuleBrowser : widget::OpaqueWidget {


sidebar->box.size.y = box.size.y; sidebar->box.size.y = box.size.y;
modelLabel->box.pos = sidebar->box.getTopRight().plus(math::Vec(5, 5)); modelLabel->box.pos = sidebar->box.getTopRight().plus(math::Vec(5, 5));
moduleBrowserZoomSlider->box.pos = sidebar->box.getTopRight().plus(math::Vec(500, 5));
moduleBrowserZoomButton->box.pos = sidebar->box.getTopRight().plus(math::Vec(500, 5));
modelScroll->box.pos = sidebar->box.getTopRight().plus(math::Vec(0, 30)); modelScroll->box.pos = sidebar->box.getTopRight().plus(math::Vec(0, 30));
modelScroll->box.size = box.size.minus(modelScroll->box.pos); modelScroll->box.size = box.size.minus(modelScroll->box.pos);
modelMargin->box.size.x = modelScroll->box.size.x; modelMargin->box.size.x = modelScroll->box.size.x;


Loading…
Cancel
Save