Chevron menu for polyphony

This commit is contained in:
Jean Pierre Cimalando 2021-02-24 01:07:35 +01:00
parent 4b97e55352
commit 95fb11ee34
5 changed files with 176 additions and 136 deletions

View file

@ -11,7 +11,7 @@ widget_class mainView {open
class Background class Background
} }
Fl_Group {} { Fl_Group {} {
comment {theme=darkTheme} comment {theme=darkTheme} open
xywh {0 0 800 110} xywh {0 0 800 110}
class LogicalGroup class LogicalGroup
} { } {
@ -95,7 +95,7 @@ widget_class mainView {open
class Label class Label
} }
Fl_Box numVoicesLabel_ { Fl_Box numVoicesLabel_ {
xywh {380 76 50 25} labelsize 12 align 16 xywh {380 76 35 25} labelsize 12 align 16
class Label class Label
} }
Fl_Box {} { Fl_Box {} {
@ -107,6 +107,11 @@ widget_class mainView {open
xywh {500 76 50 25} labelsize 12 align 16 xywh {500 76 50 25} labelsize 12 align 16
class Label class Label
} }
Fl_Button numVoicesSlider_ {
comment {tag=kTagSetNumVoices}
xywh {415 80 20 20} labelsize 16
class ChevronValueDropDown
}
} }
Fl_Group {} {open Fl_Group {} {open
xywh {570 5 225 100} box ROUNDED_BOX xywh {570 5 225 100} box ROUNDED_BOX
@ -211,43 +216,33 @@ widget_class mainView {open
} {} } {}
} }
} }
Fl_Group {subPanels_[kPanelSettings]} {open Fl_Group {subPanels_[kPanelSettings]} {open selected
xywh {5 109 790 316} xywh {5 109 790 316}
class LogicalGroup class LogicalGroup
} { } {
Fl_Group {} { Fl_Group {} {
label Engine open label Engine open
xywh {260 135 280 100} box ROUNDED_BOX labelsize 12 align 17 xywh {295 135 205 100} box ROUNDED_BOX labelsize 12 align 17
class TitleGroup class TitleGroup
} { } {
Fl_Spinner numVoicesSlider_ {
comment {tag=kTagSetNumVoices}
xywh {285 195 60 25} labelsize 12 textsize 12
class ValueMenu
}
Fl_Box {} {
label Polyphony
xywh {275 155 80 25} labelsize 12
class ValueLabel
}
Fl_Spinner oversamplingSlider_ { Fl_Spinner oversamplingSlider_ {
comment {tag=kTagSetOversampling} comment {tag=kTagSetOversampling}
xywh {370 195 60 25} labelsize 12 textsize 12 xywh {330 195 60 25} labelsize 12 textsize 12
class ValueMenu class ValueMenu
} }
Fl_Box {} { Fl_Box {} {
label Oversampling label Oversampling
xywh {360 155 80 25} labelsize 12 xywh {320 155 80 25} labelsize 12
class ValueLabel class ValueLabel
} }
Fl_Box {} { Fl_Box {} {
label {Preload size} label {Preload size}
xywh {445 155 80 25} labelsize 12 xywh {405 155 80 25} labelsize 12
class ValueLabel class ValueLabel
} }
Fl_Spinner preloadSizeSlider_ { Fl_Spinner preloadSizeSlider_ {
comment {tag=kTagSetPreloadSize} comment {tag=kTagSetPreloadSize}
xywh {455 195 60 25} labelsize 12 textsize 12 xywh {415 195 60 25} labelsize 12 textsize 12
class ValueMenu class ValueMenu
} }
} }
@ -303,7 +298,7 @@ widget_class mainView {open
class ValueMenu class ValueMenu
} }
Fl_Button scalaResetButton_ { Fl_Button scalaResetButton_ {
comment {tag=kTagResetScalaFile} selected comment {tag=kTagResetScalaFile}
xywh {295 330 25 25} labelsize 12 xywh {295 330 25 25} labelsize 12
class ResetSomethingButton class ResetSomethingButton
} }

View file

@ -588,6 +588,7 @@ void Editor::Impl::createFrameContents()
typedef STextButton ResetSomethingButton; typedef STextButton ResetSomethingButton;
typedef SPiano Piano; typedef SPiano Piano;
typedef SActionMenu ChevronDropDown; typedef SActionMenu ChevronDropDown;
typedef SValueMenu ChevronValueDropDown;
typedef SControlsPanel ControlsPanel; typedef SControlsPanel ControlsPanel;
auto createLogicalGroup = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) { auto createLogicalGroup = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) {
@ -762,6 +763,19 @@ void Editor::Impl::createFrameContents()
menu->setBackColor(CColor(0x00, 0x00, 0x00, 0x00)); menu->setBackColor(CColor(0x00, 0x00, 0x00, 0x00));
return menu; return menu;
}; };
auto createChevronValueDropDown = [this, &theme](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
SValueMenu* menu = new SValueMenu(bounds, this, tag);
menu->setValueToStringFunction2([](float, std::string& result, CParamDisplay*) -> bool {
result = u8"\ue0d7";
return true;
});
menu->setFont(makeOwned<CFontDesc>("Sfizz Fluent System R20", fontsize));
menu->setFontColor(theme->icon);
menu->setHoverColor(theme->iconHighlight);
menu->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00));
menu->setBackColor(CColor(0x00, 0x00, 0x00, 0x00));
return menu;
};
auto createBackground = [&background](const CRect& bounds, int, const char*, CHoriTxtAlign, int) { auto createBackground = [&background](const CRect& bounds, int, const char*, CHoriTxtAlign, int) {
CViewContainer* container = new CViewContainer(bounds); CViewContainer* container = new CViewContainer(bounds);
container->setBackground(background); container->setBackground(background);
@ -836,12 +850,6 @@ void Editor::Impl::createFrameContents()
for (int value : {1, 2, 4, 8, 16, 32, 64, 96, 128, 160, 192, 224, 256}) for (int value : {1, 2, 4, 8, 16, 32, 64, 96, 128, 160, 192, 224, 256})
numVoicesSlider_->addEntry(std::to_string(value), value); numVoicesSlider_->addEntry(std::to_string(value), value);
numVoicesSlider_->setValueToStringFunction2(
[](float value, std::string& result, CParamDisplay*) -> bool
{
result = std::to_string(static_cast<int32_t>(value));
return true;
});
for (int log2value = 0; log2value <= 3; ++log2value) { for (int log2value = 0; log2value <= 3; ++log2value) {
int value = 1 << log2value; int value = 1 << log2value;

View file

@ -164,6 +164,12 @@ SValueMenu::SValueMenu(const CRect& bounds, IControlListener* listener, int32_t
setWheelInc(0.0f); setWheelInc(0.0f);
} }
void SValueMenu::setHoverColor(const CColor& color)
{
hoverColor_ = color;
invalid();
}
CMenuItem* SValueMenu::addEntry(CMenuItem* item, float value, int32_t index) CMenuItem* SValueMenu::addEntry(CMenuItem* item, float value, int32_t index)
{ {
if (index < 0 || index > getNbEntries()) { if (index < 0 || index > getNbEntries()) {
@ -197,6 +203,30 @@ int32_t SValueMenu::getNbEntries() const
return static_cast<int32_t>(menuItems_.size()); return static_cast<int32_t>(menuItems_.size());
} }
void SValueMenu::draw(CDrawContext* dc)
{
CColor backupColor = fontColor;
if (hovered_)
fontColor = hoverColor_;
CParamDisplay::draw(dc);
if (hovered_)
fontColor = backupColor;
}
CMouseEventResult SValueMenu::onMouseEntered(CPoint& where, const CButtonState& buttons)
{
hovered_ = true;
invalid();
return CParamDisplay::onMouseEntered(where, buttons);
}
CMouseEventResult SValueMenu::onMouseExited(CPoint& where, const CButtonState& buttons)
{
hovered_ = false;
invalid();
return CParamDisplay::onMouseExited(where, buttons);
}
CMouseEventResult SValueMenu::onMouseDown(CPoint& where, const CButtonState& buttons) CMouseEventResult SValueMenu::onMouseDown(CPoint& where, const CButtonState& buttons)
{ {
(void)where; (void)where;

View file

@ -92,16 +92,25 @@ private:
class SValueMenu : public CParamDisplay { class SValueMenu : public CParamDisplay {
public: public:
explicit SValueMenu(const CRect& bounds, IControlListener* listener, int32_t tag); explicit SValueMenu(const CRect& bounds, IControlListener* listener, int32_t tag);
CColor getHoverColor() const { return hoverColor_; }
void setHoverColor(const CColor& color);
CMenuItem* addEntry(CMenuItem* item, float value, int32_t index = -1); CMenuItem* addEntry(CMenuItem* item, float value, int32_t index = -1);
CMenuItem* addEntry(const UTF8String& title, float value, int32_t index = -1, int32_t itemFlags = CMenuItem::kNoFlags); CMenuItem* addEntry(const UTF8String& title, float value, int32_t index = -1, int32_t itemFlags = CMenuItem::kNoFlags);
CMenuItem* addSeparator(int32_t index = -1); CMenuItem* addSeparator(int32_t index = -1);
int32_t getNbEntries() const; int32_t getNbEntries() const;
protected: protected:
void draw(CDrawContext* dc) override;
CMouseEventResult onMouseEntered(CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseExited(CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseDown(CPoint& where, const CButtonState& buttons) override; CMouseEventResult onMouseDown(CPoint& where, const CButtonState& buttons) override;
bool onWheel(const CPoint& where, const CMouseWheelAxis& axis, const float& distance, const CButtonState& buttons) override; bool onWheel(const CPoint& where, const CMouseWheelAxis& axis, const float& distance, const CButtonState& buttons) override;
private: private:
CColor hoverColor_;
bool hovered_ = false;
//
class MenuListener; class MenuListener;
// //

View file

@ -41,7 +41,7 @@ infoVoicesLabel_ = view__17;
view__8->addView(view__17); view__8->addView(view__17);
Label* const view__18 = createLabel(CRect(130, 71, 190, 96), -1, "Max:", kRightText, 12); Label* const view__18 = createLabel(CRect(130, 71, 190, 96), -1, "Max:", kRightText, 12);
view__8->addView(view__18); view__8->addView(view__18);
Label* const view__19 = createLabel(CRect(195, 71, 245, 96), -1, "", kCenterText, 12); Label* const view__19 = createLabel(CRect(195, 71, 230, 96), -1, "", kCenterText, 12);
numVoicesLabel_ = view__19; numVoicesLabel_ = view__19;
view__8->addView(view__19); view__8->addView(view__19);
Label* const view__20 = createLabel(CRect(250, 71, 310, 96), -1, "Memory:", kRightText, 12); Label* const view__20 = createLabel(CRect(250, 71, 310, 96), -1, "Memory:", kRightText, 12);
@ -49,119 +49,117 @@ view__8->addView(view__20);
Label* const view__21 = createLabel(CRect(315, 71, 365, 96), -1, "", kCenterText, 12); Label* const view__21 = createLabel(CRect(315, 71, 365, 96), -1, "", kCenterText, 12);
memoryLabel_ = view__21; memoryLabel_ = view__21;
view__8->addView(view__21); view__8->addView(view__21);
RoundedGroup* const view__22 = createRoundedGroup(CRect(570, 5, 795, 105), -1, "", kCenterText, 14); ChevronValueDropDown* const view__22 = createChevronValueDropDown(CRect(230, 75, 250, 95), kTagSetNumVoices, "", kCenterText, 16);
view__2->addView(view__22); numVoicesSlider_ = view__22;
Knob48* const view__23 = createKnob48(CRect(45, 15, 93, 63), -1, "", kCenterText, 14); view__8->addView(view__22);
view__22->addView(view__23); RoundedGroup* const view__23 = createRoundedGroup(CRect(570, 5, 795, 105), -1, "", kCenterText, 14);
view__23->setVisible(false); view__2->addView(view__23);
ValueLabel* const view__24 = createValueLabel(CRect(40, 65, 100, 70), -1, "Center", kCenterText, 12); Knob48* const view__24 = createKnob48(CRect(45, 15, 93, 63), -1, "", kCenterText, 14);
view__22->addView(view__24); view__23->addView(view__24);
view__24->setVisible(false); view__24->setVisible(false);
StyledKnob* const view__25 = createStyledKnob(CRect(110, 15, 158, 63), kTagSetVolume, "", kCenterText, 14); ValueLabel* const view__25 = createValueLabel(CRect(40, 65, 100, 70), -1, "Center", kCenterText, 12);
volumeSlider_ = view__25; view__23->addView(view__25);
view__22->addView(view__25); view__25->setVisible(false);
ValueLabel* const view__26 = createValueLabel(CRect(105, 65, 165, 87), -1, "0.0 dB", kCenterText, 12); StyledKnob* const view__26 = createStyledKnob(CRect(110, 15, 158, 63), kTagSetVolume, "", kCenterText, 14);
volumeLabel_ = view__26; volumeSlider_ = view__26;
view__22->addView(view__26); view__23->addView(view__26);
VMeter* const view__27 = createVMeter(CRect(175, 15, 210, 70), -1, "", kCenterText, 14); ValueLabel* const view__27 = createValueLabel(CRect(105, 65, 165, 87), -1, "0.0 dB", kCenterText, 12);
view__22->addView(view__27); volumeLabel_ = view__27;
view__23->addView(view__27);
VMeter* const view__28 = createVMeter(CRect(175, 15, 210, 70), -1, "", kCenterText, 14);
view__23->addView(view__28);
enterTheme(defaultTheme); enterTheme(defaultTheme);
LogicalGroup* const view__28 = createLogicalGroup(CRect(5, 110, 796, 395), -1, "", kCenterText, 14); LogicalGroup* const view__29 = createLogicalGroup(CRect(5, 110, 796, 395), -1, "", kCenterText, 14);
subPanels_[kPanelGeneral] = view__28; subPanels_[kPanelGeneral] = view__29;
view__0->addView(view__28); view__0->addView(view__29);
view__28->setVisible(false); view__29->setVisible(false);
RoundedGroup* const view__29 = createRoundedGroup(CRect(0, 0, 175, 280), -1, "", kCenterText, 14); RoundedGroup* const view__30 = createRoundedGroup(CRect(0, 0, 175, 280), -1, "", kCenterText, 14);
view__28->addView(view__29);
Label* const view__30 = createLabel(CRect(15, 10, 75, 35), -1, "Curves:", kLeftText, 14);
view__29->addView(view__30); view__29->addView(view__30);
Label* const view__31 = createLabel(CRect(15, 35, 75, 60), -1, "Masters:", kLeftText, 14); Label* const view__31 = createLabel(CRect(15, 10, 75, 35), -1, "Curves:", kLeftText, 14);
view__29->addView(view__31); view__30->addView(view__31);
Label* const view__32 = createLabel(CRect(15, 60, 75, 85), -1, "Groups:", kLeftText, 14); Label* const view__32 = createLabel(CRect(15, 35, 75, 60), -1, "Masters:", kLeftText, 14);
view__29->addView(view__32); view__30->addView(view__32);
Label* const view__33 = createLabel(CRect(15, 85, 75, 110), -1, "Regions:", kLeftText, 14); Label* const view__33 = createLabel(CRect(15, 60, 75, 85), -1, "Groups:", kLeftText, 14);
view__29->addView(view__33); view__30->addView(view__33);
Label* const view__34 = createLabel(CRect(15, 110, 75, 135), -1, "Samples:", kLeftText, 14); Label* const view__34 = createLabel(CRect(15, 85, 75, 110), -1, "Regions:", kLeftText, 14);
view__29->addView(view__34); view__30->addView(view__34);
Label* const view__35 = createLabel(CRect(115, 10, 155, 35), -1, "0", kCenterText, 14); Label* const view__35 = createLabel(CRect(15, 110, 75, 135), -1, "Samples:", kLeftText, 14);
infoCurvesLabel_ = view__35; view__30->addView(view__35);
view__29->addView(view__35); Label* const view__36 = createLabel(CRect(115, 10, 155, 35), -1, "0", kCenterText, 14);
Label* const view__36 = createLabel(CRect(115, 35, 155, 60), -1, "0", kCenterText, 14); infoCurvesLabel_ = view__36;
infoMastersLabel_ = view__36; view__30->addView(view__36);
view__29->addView(view__36); Label* const view__37 = createLabel(CRect(115, 35, 155, 60), -1, "0", kCenterText, 14);
Label* const view__37 = createLabel(CRect(115, 60, 155, 85), -1, "0", kCenterText, 14); infoMastersLabel_ = view__37;
infoGroupsLabel_ = view__37; view__30->addView(view__37);
view__29->addView(view__37); Label* const view__38 = createLabel(CRect(115, 60, 155, 85), -1, "0", kCenterText, 14);
Label* const view__38 = createLabel(CRect(115, 85, 155, 110), -1, "0", kCenterText, 14); infoGroupsLabel_ = view__38;
infoRegionsLabel_ = view__38; view__30->addView(view__38);
view__29->addView(view__38); Label* const view__39 = createLabel(CRect(115, 85, 155, 110), -1, "0", kCenterText, 14);
Label* const view__39 = createLabel(CRect(115, 110, 155, 135), -1, "0", kCenterText, 14); infoRegionsLabel_ = view__39;
infoSamplesLabel_ = view__39; view__30->addView(view__39);
view__29->addView(view__39); Label* const view__40 = createLabel(CRect(115, 110, 155, 135), -1, "0", kCenterText, 14);
LogicalGroup* const view__40 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14); infoSamplesLabel_ = view__40;
subPanels_[kPanelControls] = view__40; view__30->addView(view__40);
view__0->addView(view__40); LogicalGroup* const view__41 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14);
view__40->setVisible(false); subPanels_[kPanelControls] = view__41;
RoundedGroup* const view__41 = createRoundedGroup(CRect(0, 0, 790, 285), -1, "", kCenterText, 14); view__0->addView(view__41);
view__40->addView(view__41); view__41->setVisible(false);
ControlsPanel* const view__42 = createControlsPanel(CRect(0, 0, 790, 285), -1, "", kCenterText, 14); RoundedGroup* const view__42 = createRoundedGroup(CRect(0, 0, 790, 285), -1, "", kCenterText, 14);
controlsPanel_ = view__42;
view__41->addView(view__42); view__41->addView(view__42);
LogicalGroup* const view__43 = createLogicalGroup(CRect(5, 109, 795, 425), -1, "", kCenterText, 14); ControlsPanel* const view__43 = createControlsPanel(CRect(0, 0, 790, 285), -1, "", kCenterText, 14);
subPanels_[kPanelSettings] = view__43; controlsPanel_ = view__43;
view__0->addView(view__43); view__42->addView(view__43);
TitleGroup* const view__44 = createTitleGroup(CRect(255, 26, 535, 126), -1, "Engine", kCenterText, 12); LogicalGroup* const view__44 = createLogicalGroup(CRect(5, 109, 795, 425), -1, "", kCenterText, 14);
view__43->addView(view__44); subPanels_[kPanelSettings] = view__44;
ValueMenu* const view__45 = createValueMenu(CRect(25, 60, 85, 85), kTagSetNumVoices, "", kCenterText, 12); view__0->addView(view__44);
numVoicesSlider_ = view__45; TitleGroup* const view__45 = createTitleGroup(CRect(290, 26, 495, 126), -1, "Engine", kCenterText, 12);
view__44->addView(view__45); view__44->addView(view__45);
ValueLabel* const view__46 = createValueLabel(CRect(15, 20, 95, 45), -1, "Polyphony", kCenterText, 12); ValueMenu* const view__46 = createValueMenu(CRect(35, 60, 95, 85), kTagSetOversampling, "", kCenterText, 12);
view__44->addView(view__46); oversamplingSlider_ = view__46;
ValueMenu* const view__47 = createValueMenu(CRect(110, 60, 170, 85), kTagSetOversampling, "", kCenterText, 12); view__45->addView(view__46);
oversamplingSlider_ = view__47; ValueLabel* const view__47 = createValueLabel(CRect(25, 20, 105, 45), -1, "Oversampling", kCenterText, 12);
view__44->addView(view__47); view__45->addView(view__47);
ValueLabel* const view__48 = createValueLabel(CRect(100, 20, 180, 45), -1, "Oversampling", kCenterText, 12); ValueLabel* const view__48 = createValueLabel(CRect(110, 20, 190, 45), -1, "Preload size", kCenterText, 12);
view__44->addView(view__48); view__45->addView(view__48);
ValueLabel* const view__49 = createValueLabel(CRect(185, 20, 265, 45), -1, "Preload size", kCenterText, 12); ValueMenu* const view__49 = createValueMenu(CRect(120, 60, 180, 85), kTagSetPreloadSize, "", kCenterText, 12);
view__44->addView(view__49); preloadSizeSlider_ = view__49;
ValueMenu* const view__50 = createValueMenu(CRect(195, 60, 255, 85), kTagSetPreloadSize, "", kCenterText, 12); view__45->addView(view__49);
preloadSizeSlider_ = view__50; TitleGroup* const view__50 = createTitleGroup(CRect(170, 161, 585, 261), -1, "Tuning", kCenterText, 12);
view__44->addView(view__50); view__44->addView(view__50);
TitleGroup* const view__51 = createTitleGroup(CRect(170, 161, 585, 261), -1, "Tuning", kCenterText, 12); ValueLabel* const view__51 = createValueLabel(CRect(155, 20, 235, 45), -1, "Root key", kCenterText, 12);
view__43->addView(view__51); view__50->addView(view__51);
ValueLabel* const view__52 = createValueLabel(CRect(155, 20, 235, 45), -1, "Root key", kCenterText, 12); ValueMenu* const view__52 = createValueMenu(CRect(250, 60, 310, 85), kTagSetTuningFrequency, "", kCenterText, 12);
view__51->addView(view__52); tuningFrequencySlider_ = view__52;
ValueMenu* const view__53 = createValueMenu(CRect(250, 60, 310, 85), kTagSetTuningFrequency, "", kCenterText, 12); view__50->addView(view__52);
tuningFrequencySlider_ = view__53; ValueLabel* const view__53 = createValueLabel(CRect(240, 20, 320, 45), -1, "Frequency", kCenterText, 12);
view__51->addView(view__53); view__50->addView(view__53);
ValueLabel* const view__54 = createValueLabel(CRect(240, 20, 320, 45), -1, "Frequency", kCenterText, 12); StyledKnob* const view__54 = createStyledKnob(CRect(340, 45, 388, 93), kTagSetStretchedTuning, "", kCenterText, 14);
view__51->addView(view__54); stretchedTuningSlider_ = view__54;
StyledKnob* const view__55 = createStyledKnob(CRect(340, 45, 388, 93), kTagSetStretchedTuning, "", kCenterText, 14); view__50->addView(view__54);
stretchedTuningSlider_ = view__55; ValueLabel* const view__55 = createValueLabel(CRect(325, 20, 405, 45), -1, "Stretch", kCenterText, 12);
view__51->addView(view__55); view__50->addView(view__55);
ValueLabel* const view__56 = createValueLabel(CRect(325, 20, 405, 45), -1, "Stretch", kCenterText, 12); ValueLabel* const view__56 = createValueLabel(CRect(20, 20, 120, 45), -1, "Scala file", kCenterText, 12);
view__51->addView(view__56); view__50->addView(view__56);
ValueLabel* const view__57 = createValueLabel(CRect(20, 20, 120, 45), -1, "Scala file", kCenterText, 12); ValueButton* const view__57 = createValueButton(CRect(20, 60, 120, 85), kTagLoadScalaFile, "DefaultScale", kCenterText, 12);
view__51->addView(view__57); scalaFileButton_ = view__57;
ValueButton* const view__58 = createValueButton(CRect(20, 60, 120, 85), kTagLoadScalaFile, "DefaultScale", kCenterText, 12); view__50->addView(view__57);
scalaFileButton_ = view__58; ValueMenu* const view__58 = createValueMenu(CRect(165, 60, 200, 85), kTagSetScalaRootKey, "", kCenterText, 12);
view__51->addView(view__58); scalaRootKeySlider_ = view__58;
ValueMenu* const view__59 = createValueMenu(CRect(165, 60, 200, 85), kTagSetScalaRootKey, "", kCenterText, 12); view__50->addView(view__58);
scalaRootKeySlider_ = view__59; ValueMenu* const view__59 = createValueMenu(CRect(200, 60, 230, 85), kTagSetScalaRootKey, "", kCenterText, 12);
view__51->addView(view__59); scalaRootOctaveSlider_ = view__59;
ValueMenu* const view__60 = createValueMenu(CRect(200, 60, 230, 85), kTagSetScalaRootKey, "", kCenterText, 12); view__50->addView(view__59);
scalaRootOctaveSlider_ = view__60; ResetSomethingButton* const view__60 = createResetSomethingButton(CRect(120, 60, 145, 85), kTagResetScalaFile, "", kCenterText, 12);
view__51->addView(view__60); scalaResetButton_ = view__60;
ResetSomethingButton* const view__61 = createResetSomethingButton(CRect(120, 60, 145, 85), kTagResetScalaFile, "", kCenterText, 12); view__50->addView(view__60);
scalaResetButton_ = view__61; TitleGroup* const view__61 = createTitleGroup(CRect(615, 161, 754, 261), -1, "Files", kCenterText, 12);
view__51->addView(view__61); userFilesGroup_ = view__61;
TitleGroup* const view__62 = createTitleGroup(CRect(615, 161, 754, 261), -1, "Files", kCenterText, 12); view__44->addView(view__61);
userFilesGroup_ = view__62; ValueLabel* const view__62 = createValueLabel(CRect(20, 20, 120, 45), -1, "User SFZ folder", kCenterText, 12);
view__43->addView(view__62); view__61->addView(view__62);
ValueLabel* const view__63 = createValueLabel(CRect(20, 20, 120, 45), -1, "User SFZ folder", kCenterText, 12); ValueButton* const view__63 = createValueButton(CRect(20, 60, 120, 85), kTagChooseUserFilesDir, "DefaultPath", kCenterText, 12);
view__62->addView(view__63); userFilesDirButton_ = view__63;
ValueButton* const view__64 = createValueButton(CRect(20, 60, 120, 85), kTagChooseUserFilesDir, "DefaultPath", kCenterText, 12); view__61->addView(view__63);
userFilesDirButton_ = view__64; Piano* const view__64 = createPiano(CRect(5, 400, 795, 470), -1, "", kCenterText, 12);
view__62->addView(view__64); piano_ = view__64;
Piano* const view__65 = createPiano(CRect(5, 400, 795, 470), -1, "", kCenterText, 12); view__0->addView(view__64);
piano_ = view__65;
view__0->addView(view__65);