@@ -1,10 +1,8 @@ | |||
#pragma once | |||
#include "ui/common.hpp" | |||
#include "math.hpp" | |||
namespace rack { | |||
namespace ui { | |||
/** A controller for manipulating a float value (which subclasses must store somehow) with limits and labels | |||
@@ -119,5 +117,4 @@ struct Quantity { | |||
}; | |||
} // namespace ui | |||
} // namespace rack |
@@ -1,5 +1,5 @@ | |||
#pragma once | |||
#include "ui/Quantity.hpp" | |||
#include "Quantity.hpp" | |||
#include "engine/Module.hpp" | |||
#include "engine/Param.hpp" | |||
@@ -8,8 +8,8 @@ namespace rack { | |||
namespace app { | |||
/** A ui::Quantity that wraps an engine::Param. */ | |||
struct ParamQuantity : ui::Quantity { | |||
/** A Quantity that wraps an engine::Param. */ | |||
struct ParamQuantity : Quantity { | |||
engine::Module *module = NULL; | |||
int paramId = 0; | |||
@@ -1,7 +1,7 @@ | |||
#pragma once | |||
#include "widget/OpaqueWidget.hpp" | |||
#include "ui/common.hpp" | |||
#include "ui/Quantity.hpp" | |||
#include "Quantity.hpp" | |||
namespace rack { | |||
@@ -11,11 +11,10 @@ namespace ui { | |||
struct Button : widget::OpaqueWidget { | |||
std::string text; | |||
BNDwidgetState state = BND_DEFAULT; | |||
/** Optional, owned. Tracks the pressed state of the button.*/ | |||
/** Not owned. Tracks the pressed state of the button.*/ | |||
Quantity *quantity = NULL; | |||
Button(); | |||
~Button(); | |||
void draw(const DrawArgs &args) override; | |||
void onEnter(const widget::EnterEvent &e) override; | |||
void onLeave(const widget::LeaveEvent &e) override; | |||
@@ -1,7 +1,7 @@ | |||
#pragma once | |||
#include "ui/common.hpp" | |||
#include "widget/Widget.hpp" | |||
#include "ui/Quantity.hpp" | |||
#include "Quantity.hpp" | |||
namespace rack { | |||
@@ -9,10 +9,10 @@ namespace ui { | |||
struct ProgressBar : widget::Widget { | |||
/** Not owned. Stores the progress value and label. */ | |||
Quantity *quantity = NULL; | |||
ProgressBar(); | |||
~ProgressBar(); | |||
void draw(const DrawArgs &args) override; | |||
}; | |||
@@ -1,7 +1,7 @@ | |||
#pragma once | |||
#include "ui/common.hpp" | |||
#include "widget/OpaqueWidget.hpp" | |||
#include "ui/Quantity.hpp" | |||
#include "Quantity.hpp" | |||
namespace rack { | |||
@@ -10,10 +10,10 @@ namespace ui { | |||
struct RadioButton : widget::OpaqueWidget { | |||
BNDwidgetState state = BND_DEFAULT; | |||
/** Not owned. */ | |||
Quantity *quantity = NULL; | |||
RadioButton(); | |||
~RadioButton(); | |||
void draw(const DrawArgs &args) override; | |||
void onEnter(const widget::EnterEvent &e) override; | |||
void onLeave(const widget::LeaveEvent &e) override; | |||
@@ -1,6 +1,6 @@ | |||
#pragma once | |||
#include "widget/OpaqueWidget.hpp" | |||
#include "ui/Quantity.hpp" | |||
#include "Quantity.hpp" | |||
#include "ui/common.hpp" | |||
#include "app.hpp" | |||
@@ -11,10 +11,10 @@ namespace ui { | |||
struct Slider : widget::OpaqueWidget { | |||
BNDwidgetState state = BND_DEFAULT; | |||
/** Not owned. */ | |||
Quantity *quantity = NULL; | |||
Slider(); | |||
~Slider(); | |||
void draw(const DrawArgs &args) override; | |||
void onDragStart(const widget::DragStartEvent &e) override; | |||
void onDragMove(const widget::DragMoveEvent &e) override; | |||
@@ -121,7 +121,7 @@ struct InfoBox : widget::Widget { | |||
}; | |||
struct ModelFavoriteQuantity : ui::Quantity { | |||
struct ModelFavoriteQuantity : Quantity { | |||
plugin::Model *model; | |||
std::string getLabel() override {return "★";} | |||
void setValue(float value) override { | |||
@@ -141,6 +141,16 @@ struct ModelFavoriteQuantity : ui::Quantity { | |||
}; | |||
struct ModelFavoriteButton : ui::RadioButton { | |||
ModelFavoriteButton() { | |||
quantity = new ModelFavoriteQuantity; | |||
} | |||
~ModelFavoriteButton() { | |||
delete quantity; | |||
} | |||
}; | |||
static const float MODEL_BOX_ZOOM = 0.5f; | |||
@@ -148,7 +158,7 @@ struct ModelBox : widget::OpaqueWidget { | |||
plugin::Model *model; | |||
InfoBox *infoBox; | |||
widget::Widget *previewWidget; | |||
ui::RadioButton *favoriteButton; | |||
ModelFavoriteButton *favoriteButton; | |||
/** Lazily created */ | |||
widget::FramebufferWidget *previewFb = NULL; | |||
/** Number of frames since draw() has been called */ | |||
@@ -176,10 +186,8 @@ struct ModelBox : widget::OpaqueWidget { | |||
addChild(infoBox); | |||
// Favorite button | |||
favoriteButton = new ui::RadioButton; | |||
ModelFavoriteQuantity *favoriteQuantity = new ModelFavoriteQuantity; | |||
favoriteQuantity->model = model; | |||
favoriteButton->quantity = favoriteQuantity; | |||
favoriteButton = new ModelFavoriteButton; | |||
dynamic_cast<ModelFavoriteQuantity*>(favoriteButton->quantity)->model = model; | |||
favoriteButton->box.pos.y = box.size.y; | |||
box.size.y += favoriteButton->box.size.y; | |||
addChild(favoriteButton); | |||
@@ -301,7 +309,7 @@ struct BrowserSearchField : ui::TextField { | |||
}; | |||
struct ShowFavoritesQuantity : ui::Quantity { | |||
struct ShowFavoritesQuantity : Quantity { | |||
widget::Widget *widget; | |||
std::string getLabel() override { | |||
int favoritesLen = settings::favoriteModels.size(); | |||
@@ -312,9 +320,19 @@ struct ShowFavoritesQuantity : ui::Quantity { | |||
}; | |||
struct ShowFavoritesButton : ui::RadioButton { | |||
ShowFavoritesButton() { | |||
quantity = new ShowFavoritesQuantity; | |||
} | |||
~ShowFavoritesButton() { | |||
delete quantity; | |||
} | |||
}; | |||
struct BrowserSidebar : widget::Widget { | |||
BrowserSearchField *searchField; | |||
ui::RadioButton *favoriteButton; | |||
ShowFavoritesButton *favoriteButton; | |||
ui::Label *authorLabel; | |||
ui::List *authorList; | |||
ui::ScrollWidget *authorScroll; | |||
@@ -326,10 +344,8 @@ struct BrowserSidebar : widget::Widget { | |||
searchField = new BrowserSearchField; | |||
addChild(searchField); | |||
favoriteButton = new ui::RadioButton; | |||
ShowFavoritesQuantity *favoriteQuantity = new ShowFavoritesQuantity; | |||
favoriteQuantity->widget = favoriteButton; | |||
favoriteButton->quantity = favoriteQuantity; | |||
favoriteButton = new ShowFavoritesButton; | |||
dynamic_cast<ShowFavoritesQuantity*>(favoriteButton->quantity)->widget = favoriteButton; | |||
addChild(favoriteButton); | |||
authorLabel = new ui::Label; | |||
@@ -58,7 +58,7 @@ float ParamQuantity::getDefaultValue() { | |||
float ParamQuantity::getDisplayValue() { | |||
if (!module) | |||
return ui::Quantity::getDisplayValue(); | |||
return Quantity::getDisplayValue(); | |||
float v = getSmoothValue(); | |||
float displayBase = getParam()->displayBase; | |||
if (displayBase == 0.f) { | |||
@@ -95,26 +95,26 @@ void ParamQuantity::setDisplayValue(float displayValue) { | |||
} | |||
int ParamQuantity::getDisplayPrecision() { | |||
return ui::Quantity::getDisplayPrecision(); | |||
return Quantity::getDisplayPrecision(); | |||
} | |||
std::string ParamQuantity::getDisplayValueString() { | |||
return ui::Quantity::getDisplayValueString(); | |||
return Quantity::getDisplayValueString(); | |||
} | |||
void ParamQuantity::setDisplayValueString(std::string s) { | |||
ui::Quantity::setDisplayValueString(s); | |||
Quantity::setDisplayValueString(s); | |||
} | |||
std::string ParamQuantity::getLabel() { | |||
if (!module) | |||
return ui::Quantity::getLabel(); | |||
return Quantity::getLabel(); | |||
return getParam()->label; | |||
} | |||
std::string ParamQuantity::getUnit() { | |||
if (!module) | |||
return ui::Quantity::getUnit(); | |||
return Quantity::getUnit(); | |||
return getParam()->unit; | |||
} | |||
@@ -63,7 +63,7 @@ struct ParamTooltip : ui::Tooltip { | |||
void step() override { | |||
if (paramWidget->paramQuantity) { | |||
// ui::Quantity string | |||
// Quantity string | |||
text = paramWidget->paramQuantity->getString(); | |||
// Param description | |||
std::string description = paramWidget->paramQuantity->getParam()->description; | |||
@@ -170,7 +170,7 @@ struct EditButton : MenuButton { | |||
}; | |||
struct ZoomQuantity : ui::Quantity { | |||
struct ZoomQuantity : Quantity { | |||
void setValue(float value) override { | |||
settings::zoom = math::clamp(value, getMinValue(), getMaxValue()); | |||
} | |||
@@ -187,7 +187,17 @@ struct ZoomQuantity : ui::Quantity { | |||
}; | |||
struct CableOpacityQuantity : ui::Quantity { | |||
struct ZoomSlider : ui::Slider { | |||
ZoomSlider() { | |||
quantity = new ZoomQuantity; | |||
} | |||
~ZoomSlider() { | |||
delete quantity; | |||
} | |||
}; | |||
struct CableOpacityQuantity : Quantity { | |||
void setValue(float value) override { | |||
settings::cableOpacity = math::clamp(value, getMinValue(), getMaxValue()); | |||
} | |||
@@ -203,7 +213,17 @@ struct CableOpacityQuantity : ui::Quantity { | |||
struct CableTensionQuantity : ui::Quantity { | |||
struct CableOpacitySlider : ui::Slider { | |||
CableOpacitySlider() { | |||
quantity = new CableOpacityQuantity; | |||
} | |||
~CableOpacitySlider() { | |||
delete quantity; | |||
} | |||
}; | |||
struct CableTensionQuantity : Quantity { | |||
void setValue(float value) override { | |||
settings::cableTension = math::clamp(value, getMinValue(), getMaxValue()); | |||
} | |||
@@ -216,6 +236,16 @@ struct CableTensionQuantity : ui::Quantity { | |||
}; | |||
struct CableTensionSlider : ui::Slider { | |||
CableTensionSlider() { | |||
quantity = new CableTensionQuantity; | |||
} | |||
~CableTensionSlider() { | |||
delete quantity; | |||
} | |||
}; | |||
struct CpuMeterItem : ui::MenuItem { | |||
void onAction(const widget::ActionEvent &e) override { | |||
settings::cpuMeter ^= true; | |||
@@ -359,19 +389,16 @@ struct SettingsButton : MenuButton { | |||
fullscreenItem->rightText = CHECKMARK_STRING " " + fullscreenItem->rightText; | |||
menu->addChild(fullscreenItem); | |||
ui::Slider *zoomSlider = new ui::Slider; | |||
ZoomSlider *zoomSlider = new ZoomSlider; | |||
zoomSlider->box.size.x = 200.0; | |||
zoomSlider->quantity = new ZoomQuantity; | |||
menu->addChild(zoomSlider); | |||
ui::Slider *cableOpacitySlider = new ui::Slider; | |||
CableOpacitySlider *cableOpacitySlider = new CableOpacitySlider; | |||
cableOpacitySlider->box.size.x = 200.0; | |||
cableOpacitySlider->quantity = new CableOpacityQuantity; | |||
menu->addChild(cableOpacitySlider); | |||
ui::Slider *cableTensionSlider = new ui::Slider; | |||
CableTensionSlider *cableTensionSlider = new CableTensionSlider; | |||
cableTensionSlider->box.size.x = 200.0; | |||
cableTensionSlider->quantity = new CableTensionQuantity; | |||
menu->addChild(cableTensionSlider); | |||
} | |||
}; | |||
@@ -490,7 +517,7 @@ struct LogOutItem : ui::MenuItem { | |||
}; | |||
struct DownloadQuantity : ui::Quantity { | |||
struct DownloadQuantity : Quantity { | |||
float getValue() override { | |||
return plugin::downloadProgress; | |||
} | |||
@@ -9,11 +9,6 @@ Button::Button() { | |||
box.size.y = BND_WIDGET_HEIGHT; | |||
} | |||
Button::~Button() { | |||
if (quantity) | |||
delete quantity; | |||
} | |||
void Button::draw(const DrawArgs &args) { | |||
bndToolButton(args.vg, 0.0, 0.0, box.size.x, box.size.y, BND_CORNER_NONE, state, -1, text.c_str()); | |||
} | |||
@@ -9,11 +9,6 @@ ProgressBar::ProgressBar() { | |||
box.size.y = BND_WIDGET_HEIGHT; | |||
} | |||
ProgressBar::~ProgressBar() { | |||
if (quantity) | |||
delete quantity; | |||
} | |||
void ProgressBar::draw(const DrawArgs &args) { | |||
float progress = quantity ? quantity->getScaledValue() : 0.f; | |||
std::string text = quantity ? quantity->getString() : ""; | |||
@@ -1,9 +1,8 @@ | |||
#include "ui/Quantity.hpp" | |||
#include "Quantity.hpp" | |||
#include "string.hpp" | |||
namespace rack { | |||
namespace ui { | |||
int Quantity::getDisplayPrecision() { | |||
@@ -44,5 +43,4 @@ std::string Quantity::getString() { | |||
} | |||
} // namespace ui | |||
} // namespace rack |
@@ -9,11 +9,6 @@ RadioButton::RadioButton() { | |||
box.size.y = BND_WIDGET_HEIGHT; | |||
} | |||
RadioButton::~RadioButton() { | |||
if (quantity) | |||
delete quantity; | |||
} | |||
void RadioButton::draw(const DrawArgs &args) { | |||
BNDwidgetState state = this->state; | |||
std::string label; | |||
@@ -12,11 +12,6 @@ Slider::Slider() { | |||
box.size.y = BND_WIDGET_HEIGHT; | |||
} | |||
Slider::~Slider() { | |||
if (quantity) | |||
delete quantity; | |||
} | |||
void Slider::draw(const DrawArgs &args) { | |||
float progress = quantity ? quantity->getScaledValue() : 0.f; | |||
std::string text = quantity ? quantity->getString() : ""; | |||