Merge pull request #670 from jpcima/sw-badge

Keyswitch badge with the key name
This commit is contained in:
JP Cimalando 2021-02-27 10:00:41 +01:00 committed by GitHub
commit e8056471ed
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 209 additions and 138 deletions

View file

@ -61,17 +61,25 @@ widget_class mainView {open
class ClickableLabel class ClickableLabel
} }
Fl_Box keyswitchLabel_ { Fl_Box keyswitchLabel_ {
label {Key switch:} xywh {265 45 290 30} labelsize 20 align 20
xywh {195 45 360 30} labelsize 20 align 20
class Label class Label
} }
Fl_Box keyswitchBadge_ {
xywh {195 47 60 26} box THIN_UP_BOX labelsize 20
class Badge
}
Fl_Box keyswitchInactiveLabel_ {
label {No key switch} selected
xywh {195 45 360 30} labelsize 20 align 20 hide
class InactiveLabel
}
Fl_Box {} { Fl_Box {} {
label {Voices:} label {Voices:}
xywh {195 78 60 25} labelsize 12 align 24 xywh {195 78 60 25} labelsize 12 align 24
class Label class Label
} }
Fl_Button {} { Fl_Button {} {
comment {tag=kTagPreviousSfzFile} selected comment {tag=kTagPreviousSfzFile}
xywh {480 18 25 25} labelsize 24 xywh {480 18 25 25} labelsize 24
class PreviousFileButton class PreviousFileButton
} }

View file

@ -52,7 +52,6 @@ struct Editor::Impl : EditorController::Receiver, IControlListener {
int currentKeyswitch_ = -1; int currentKeyswitch_ = -1;
std::unordered_map<unsigned, std::string> keyswitchNames_; std::unordered_map<unsigned, std::string> keyswitchNames_;
std::string keyswitchLabelPrefix_;
SharedPointer<CVSTGUITimer> memQueryTimer_; SharedPointer<CVSTGUITimer> memQueryTimer_;
@ -108,6 +107,8 @@ struct Editor::Impl : EditorController::Receiver, IControlListener {
CControl *stretchedTuningSlider_ = nullptr; CControl *stretchedTuningSlider_ = nullptr;
CTextLabel* stretchedTuningLabel_ = nullptr; CTextLabel* stretchedTuningLabel_ = nullptr;
CTextLabel* keyswitchLabel_ = nullptr; CTextLabel* keyswitchLabel_ = nullptr;
CTextLabel* keyswitchInactiveLabel_ = nullptr;
CTextLabel* keyswitchBadge_ = nullptr;
STitleContainer* userFilesGroup_ = nullptr; STitleContainer* userFilesGroup_ = nullptr;
STextButton* userFilesDirButton_ = nullptr; STextButton* userFilesDirButton_ = nullptr;
@ -204,6 +205,18 @@ struct Editor::Impl : EditorController::Receiver, IControlListener {
void enterOrLeaveEdit(CControl* ctl, bool enter); void enterOrLeaveEdit(CControl* ctl, bool enter);
void controlBeginEdit(CControl* ctl) override; void controlBeginEdit(CControl* ctl) override;
void controlEndEdit(CControl* ctl) override; void controlEndEdit(CControl* ctl) override;
// Misc
static std::string getUnicodeNoteName(unsigned key)
{
const char* keyNames[12] = {
u8"C", u8"C♯", u8"D", u8"D♯", u8"E",
u8"F", u8"F♯", u8"G", u8"G♯", u8"A", u8"A♯", u8"B",
};
int octave = static_cast<int>(key / 12) - 1;
const char* keyName = keyNames[key % 12];
return std::string(keyName) + ' ' + std::to_string(octave);
}
}; };
Editor::Editor(EditorController& ctrl) Editor::Editor(EditorController& ctrl)
@ -592,8 +605,8 @@ void Editor::Impl::createFrameContents()
darkTheme.titleBoxBackground = { 0xba, 0xbd, 0xb6 }; darkTheme.titleBoxBackground = { 0xba, 0xbd, 0xb6 };
darkTheme.icon = darkTheme.text; darkTheme.icon = darkTheme.text;
darkTheme.iconHighlight = { 0xfd, 0x98, 0x00 }; darkTheme.iconHighlight = { 0xfd, 0x98, 0x00 };
darkTheme.valueText = { 0x2e, 0x34, 0x36 }; darkTheme.valueText = { 0x00, 0x00, 0x00 };
darkTheme.valueBackground = { 0xff, 0xff, 0xff }; darkTheme.valueBackground = { 0x9a, 0x9a, 0x9a };
darkTheme.knobActiveTrackColor = { 0x00, 0xb6, 0x2a }; darkTheme.knobActiveTrackColor = { 0x00, 0xb6, 0x2a };
darkTheme.knobInactiveTrackColor = { 0x60, 0x60, 0x60 }; darkTheme.knobInactiveTrackColor = { 0x60, 0x60, 0x60 };
darkTheme.knobLineIndicatorColor = { 0xff, 0xff, 0xff }; darkTheme.knobLineIndicatorColor = { 0xff, 0xff, 0xff };
@ -636,6 +649,16 @@ void Editor::Impl::createFrameContents()
lbl->setFont(font); lbl->setFont(font);
return lbl; return lbl;
}; };
auto createInactiveLabel = [&theme](const CRect& bounds, int, const char* label, CHoriTxtAlign align, int fontsize) {
CTextLabel* lbl = new CTextLabel(bounds, label);
lbl->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00));
lbl->setBackColor(CColor(0x00, 0x00, 0x00, 0x00));
lbl->setFontColor(theme->inactiveText);
lbl->setHoriAlign(align);
auto font = makeOwned<CFontDesc>("Roboto", fontsize);
lbl->setFont(font);
return lbl;
};
auto createHLine = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) { auto createHLine = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) {
int y = static_cast<int>(0.5 * (bounds.top + bounds.bottom)); int y = static_cast<int>(0.5 * (bounds.top + bounds.bottom));
CRect lineBounds(bounds.left, y, bounds.right, y + 1); CRect lineBounds(bounds.left, y, bounds.right, y + 1);
@ -663,6 +686,18 @@ void Editor::Impl::createFrameContents()
lbl->setFont(font); lbl->setFont(font);
return lbl; return lbl;
}; };
auto createBadge = [&theme](const CRect& bounds, int, const char* label, CHoriTxtAlign align, int fontsize) {
CTextLabel* lbl = new CTextLabel(bounds, label);
lbl->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00));
lbl->setBackColor(theme->valueBackground);
lbl->setFontColor(theme->valueText);
lbl->setHoriAlign(align);
lbl->setStyle(CParamDisplay::kRoundRectStyle);
lbl->setRoundRectRadius(5.0);
auto font = makeOwned<CFontDesc>("Roboto", fontsize);
lbl->setFont(font);
return lbl;
};
auto createVMeter = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) { auto createVMeter = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) {
// TODO the volume meter... // TODO the volume meter...
CViewContainer* container = new CViewContainer(bounds); CViewContainer* container = new CViewContainer(bounds);
@ -831,10 +866,6 @@ void Editor::Impl::createFrameContents()
mainView_ = owned(mainView); mainView_ = owned(mainView);
} }
///
if (keyswitchLabel_)
keyswitchLabelPrefix_ = std::string(keyswitchLabel_->getText()) + ' ';
/// ///
SharedPointer<SFileDropTarget> fileDropTarget = owned(new SFileDropTarget); SharedPointer<SFileDropTarget> fileDropTarget = owned(new SFileDropTarget);
@ -973,6 +1004,8 @@ void Editor::Impl::createFrameContents()
}; };
} }
updateKeyswitchNameLabel();
/// ///
CViewContainer* panel; CViewContainer* panel;
activePanel_ = 0; activePanel_ = 0;
@ -1389,9 +1422,32 @@ absl::string_view Editor::Impl::getCurrentKeyswitchName() const
void Editor::Impl::updateKeyswitchNameLabel() void Editor::Impl::updateKeyswitchNameLabel()
{ {
if (CTextLabel* label = keyswitchLabel_) { CTextLabel* label = keyswitchLabel_;
std::string name { getCurrentKeyswitchName() }; CTextLabel* badge = keyswitchBadge_;
label->setText((keyswitchLabelPrefix_ + name).c_str()); CTextLabel* inactiveLabel = keyswitchInactiveLabel_;
int sw = currentKeyswitch_;
const std::string name { getCurrentKeyswitchName() };
if (sw == -1) {
if (badge)
badge->setVisible(false);
if (label)
label->setVisible(false);
if (inactiveLabel)
inactiveLabel->setVisible(true);
}
else {
if (badge) {
badge->setText(getUnicodeNoteName(sw));
badge->setVisible(true);
}
if (label) {
label->setText(name.c_str());
label->setVisible(true);
}
if (inactiveLabel)
inactiveLabel->setVisible(false);
} }
} }

View file

@ -25,142 +25,149 @@ view__8->addView(view__10);
auto* const view__11 = createClickableLabel(CRect(10, 8, 260, 38), kTagLoadSfzFile, "DefaultInstrument.sfz", kLeftText, 20); auto* const view__11 = createClickableLabel(CRect(10, 8, 260, 38), kTagLoadSfzFile, "DefaultInstrument.sfz", kLeftText, 20);
sfzFileLabel_ = view__11; sfzFileLabel_ = view__11;
view__8->addView(view__11); view__8->addView(view__11);
auto* const view__12 = createLabel(CRect(10, 40, 370, 70), -1, "Key switch:", kLeftText, 20); auto* const view__12 = createLabel(CRect(80, 40, 370, 70), -1, "", kLeftText, 20);
keyswitchLabel_ = view__12; keyswitchLabel_ = view__12;
view__8->addView(view__12); view__8->addView(view__12);
auto* const view__13 = createLabel(CRect(10, 73, 70, 98), -1, "Voices:", kRightText, 12); auto* const view__13 = createBadge(CRect(10, 42, 70, 68), -1, "", kCenterText, 20);
keyswitchBadge_ = view__13;
view__8->addView(view__13); view__8->addView(view__13);
auto* const view__14 = createPreviousFileButton(CRect(295, 13, 320, 38), kTagPreviousSfzFile, "", kCenterText, 24); auto* const view__14 = createInactiveLabel(CRect(10, 40, 370, 70), -1, "No key switch", kLeftText, 20);
keyswitchInactiveLabel_ = view__14;
view__8->addView(view__14); view__8->addView(view__14);
auto* const view__15 = createNextFileButton(CRect(320, 13, 345, 38), kTagNextSfzFile, "", kCenterText, 24); view__14->setVisible(false);
auto* const view__15 = createLabel(CRect(10, 73, 70, 98), -1, "Voices:", kRightText, 12);
view__8->addView(view__15); view__8->addView(view__15);
auto* const view__16 = createChevronDropDown(CRect(345, 13, 370, 38), kTagFileOperations, "", kCenterText, 24); auto* const view__16 = createPreviousFileButton(CRect(295, 13, 320, 38), kTagPreviousSfzFile, "", kCenterText, 24);
fileOperationsMenu_ = view__16;
view__8->addView(view__16); view__8->addView(view__16);
auto* const view__17 = createLabel(CRect(75, 73, 115, 98), -1, "", kCenterText, 12); auto* const view__17 = createNextFileButton(CRect(320, 13, 345, 38), kTagNextSfzFile, "", kCenterText, 24);
infoVoicesLabel_ = view__17;
view__8->addView(view__17); view__8->addView(view__17);
auto* const view__18 = createLabel(CRect(130, 73, 170, 98), -1, "Max:", kRightText, 12); auto* const view__18 = createChevronDropDown(CRect(345, 13, 370, 38), kTagFileOperations, "", kCenterText, 24);
fileOperationsMenu_ = view__18;
view__8->addView(view__18); view__8->addView(view__18);
auto* const view__19 = createLabel(CRect(175, 73, 210, 98), -1, "", kCenterText, 12); auto* const view__19 = createLabel(CRect(75, 73, 115, 98), -1, "", kCenterText, 12);
numVoicesLabel_ = view__19; infoVoicesLabel_ = view__19;
view__8->addView(view__19); view__8->addView(view__19);
auto* const view__20 = createLabel(CRect(240, 73, 300, 98), -1, "Memory:", kRightText, 12); auto* const view__20 = createLabel(CRect(130, 73, 170, 98), -1, "Max:", kRightText, 12);
view__8->addView(view__20); view__8->addView(view__20);
auto* const view__21 = createLabel(CRect(305, 73, 365, 98), -1, "", kCenterText, 12); auto* const view__21 = createLabel(CRect(175, 73, 210, 98), -1, "", kCenterText, 12);
memoryLabel_ = view__21; numVoicesLabel_ = view__21;
view__8->addView(view__21); view__8->addView(view__21);
auto* const view__22 = createChevronValueDropDown(CRect(210, 77, 230, 97), kTagSetNumVoices, "", kCenterText, 16); auto* const view__22 = createLabel(CRect(240, 73, 300, 98), -1, "Memory:", kRightText, 12);
numVoicesSlider_ = view__22;
view__8->addView(view__22); view__8->addView(view__22);
auto* const view__23 = createRoundedGroup(CRect(570, 5, 795, 105), -1, "", kCenterText, 14); auto* const view__23 = createLabel(CRect(305, 73, 365, 98), -1, "", kCenterText, 12);
view__2->addView(view__23); memoryLabel_ = view__23;
auto* const view__24 = createKnob48(CRect(45, 15, 93, 63), -1, "", kCenterText, 14); view__8->addView(view__23);
view__23->addView(view__24); auto* const view__24 = createChevronValueDropDown(CRect(210, 77, 230, 97), kTagSetNumVoices, "", kCenterText, 16);
view__24->setVisible(false); numVoicesSlider_ = view__24;
auto* const view__25 = createValueLabel(CRect(40, 65, 100, 70), -1, "Center", kCenterText, 12); view__8->addView(view__24);
view__23->addView(view__25); auto* const view__25 = createRoundedGroup(CRect(570, 5, 795, 105), -1, "", kCenterText, 14);
view__25->setVisible(false); view__2->addView(view__25);
auto* const view__26 = createStyledKnob(CRect(110, 15, 158, 63), kTagSetVolume, "", kCenterText, 14); auto* const view__26 = createKnob48(CRect(45, 15, 93, 63), -1, "", kCenterText, 14);
volumeSlider_ = view__26; view__25->addView(view__26);
view__23->addView(view__26); view__26->setVisible(false);
auto* const view__27 = createValueLabel(CRect(105, 65, 165, 87), -1, "0.0 dB", kCenterText, 12); auto* const view__27 = createValueLabel(CRect(40, 65, 100, 70), -1, "Center", kCenterText, 12);
volumeLabel_ = view__27; view__25->addView(view__27);
view__23->addView(view__27); view__27->setVisible(false);
auto* const view__28 = createVMeter(CRect(175, 15, 210, 70), -1, "", kCenterText, 14); auto* const view__28 = createStyledKnob(CRect(110, 15, 158, 63), kTagSetVolume, "", kCenterText, 14);
view__23->addView(view__28); volumeSlider_ = view__28;
view__25->addView(view__28);
auto* const view__29 = createValueLabel(CRect(105, 65, 165, 87), -1, "0.0 dB", kCenterText, 12);
volumeLabel_ = view__29;
view__25->addView(view__29);
auto* const view__30 = createVMeter(CRect(175, 15, 210, 70), -1, "", kCenterText, 14);
view__25->addView(view__30);
enterTheme(defaultTheme); enterTheme(defaultTheme);
auto* const view__29 = createLogicalGroup(CRect(5, 110, 796, 395), -1, "", kCenterText, 14); auto* const view__31 = createLogicalGroup(CRect(5, 110, 796, 395), -1, "", kCenterText, 14);
subPanels_[kPanelGeneral] = view__29; subPanels_[kPanelGeneral] = view__31;
view__0->addView(view__29); view__0->addView(view__31);
view__29->setVisible(false); view__31->setVisible(false);
auto* const view__30 = createRoundedGroup(CRect(0, 0, 175, 280), -1, "", kCenterText, 14); auto* const view__32 = createRoundedGroup(CRect(0, 0, 175, 280), -1, "", kCenterText, 14);
view__29->addView(view__30); view__31->addView(view__32);
auto* const view__31 = createLabel(CRect(15, 10, 75, 35), -1, "Curves:", kLeftText, 14); auto* const view__33 = createLabel(CRect(15, 10, 75, 35), -1, "Curves:", kLeftText, 14);
view__30->addView(view__31); view__32->addView(view__33);
auto* const view__32 = createLabel(CRect(15, 35, 75, 60), -1, "Masters:", kLeftText, 14); auto* const view__34 = createLabel(CRect(15, 35, 75, 60), -1, "Masters:", kLeftText, 14);
view__30->addView(view__32); view__32->addView(view__34);
auto* const view__33 = createLabel(CRect(15, 60, 75, 85), -1, "Groups:", kLeftText, 14); auto* const view__35 = createLabel(CRect(15, 60, 75, 85), -1, "Groups:", kLeftText, 14);
view__30->addView(view__33); view__32->addView(view__35);
auto* const view__34 = createLabel(CRect(15, 85, 75, 110), -1, "Regions:", kLeftText, 14); auto* const view__36 = createLabel(CRect(15, 85, 75, 110), -1, "Regions:", kLeftText, 14);
view__30->addView(view__34); view__32->addView(view__36);
auto* const view__35 = createLabel(CRect(15, 110, 75, 135), -1, "Samples:", kLeftText, 14); auto* const view__37 = createLabel(CRect(15, 110, 75, 135), -1, "Samples:", kLeftText, 14);
view__30->addView(view__35); view__32->addView(view__37);
auto* const view__36 = createLabel(CRect(115, 10, 155, 35), -1, "0", kCenterText, 14); auto* const view__38 = createLabel(CRect(115, 10, 155, 35), -1, "0", kCenterText, 14);
infoCurvesLabel_ = view__36; infoCurvesLabel_ = view__38;
view__30->addView(view__36); view__32->addView(view__38);
auto* const view__37 = createLabel(CRect(115, 35, 155, 60), -1, "0", kCenterText, 14); auto* const view__39 = createLabel(CRect(115, 35, 155, 60), -1, "0", kCenterText, 14);
infoMastersLabel_ = view__37; infoMastersLabel_ = view__39;
view__30->addView(view__37); view__32->addView(view__39);
auto* const view__38 = createLabel(CRect(115, 60, 155, 85), -1, "0", kCenterText, 14); auto* const view__40 = createLabel(CRect(115, 60, 155, 85), -1, "0", kCenterText, 14);
infoGroupsLabel_ = view__38; infoGroupsLabel_ = view__40;
view__30->addView(view__38); view__32->addView(view__40);
auto* const view__39 = createLabel(CRect(115, 85, 155, 110), -1, "0", kCenterText, 14); auto* const view__41 = createLabel(CRect(115, 85, 155, 110), -1, "0", kCenterText, 14);
infoRegionsLabel_ = view__39; infoRegionsLabel_ = view__41;
view__30->addView(view__39); view__32->addView(view__41);
auto* const view__40 = createLabel(CRect(115, 110, 155, 135), -1, "0", kCenterText, 14); auto* const view__42 = createLabel(CRect(115, 110, 155, 135), -1, "0", kCenterText, 14);
infoSamplesLabel_ = view__40; infoSamplesLabel_ = view__42;
view__30->addView(view__40); view__32->addView(view__42);
auto* const view__41 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14); auto* const view__43 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14);
subPanels_[kPanelControls] = view__41; subPanels_[kPanelControls] = view__43;
view__0->addView(view__41); view__0->addView(view__43);
view__41->setVisible(false); view__43->setVisible(false);
auto* const view__42 = createRoundedGroup(CRect(0, 0, 790, 285), -1, "", kCenterText, 14); auto* const view__44 = createRoundedGroup(CRect(0, 0, 790, 285), -1, "", kCenterText, 14);
view__41->addView(view__42); view__43->addView(view__44);
auto* const view__43 = createControlsPanel(CRect(0, 0, 790, 285), -1, "", kCenterText, 14); auto* const view__45 = createControlsPanel(CRect(0, 0, 790, 285), -1, "", kCenterText, 14);
controlsPanel_ = view__43; controlsPanel_ = view__45;
view__42->addView(view__43);
auto* const view__44 = createLogicalGroup(CRect(5, 109, 795, 425), -1, "", kCenterText, 14);
subPanels_[kPanelSettings] = view__44;
view__0->addView(view__44);
auto* const view__45 = createTitleGroup(CRect(300, 26, 495, 126), -1, "Engine", kCenterText, 12);
view__44->addView(view__45); view__44->addView(view__45);
auto* const view__46 = createValueMenu(CRect(25, 60, 85, 85), kTagSetOversampling, "", kCenterText, 12); auto* const view__46 = createLogicalGroup(CRect(5, 109, 795, 425), -1, "", kCenterText, 14);
oversamplingSlider_ = view__46; subPanels_[kPanelSettings] = view__46;
view__45->addView(view__46); view__0->addView(view__46);
auto* const view__47 = createValueLabel(CRect(15, 20, 95, 45), -1, "Oversampling", kCenterText, 12); auto* const view__47 = createTitleGroup(CRect(300, 26, 495, 126), -1, "Engine", kCenterText, 12);
view__45->addView(view__47); view__46->addView(view__47);
auto* const view__48 = createValueLabel(CRect(100, 20, 180, 45), -1, "Preload size", kCenterText, 12); auto* const view__48 = createValueMenu(CRect(25, 60, 85, 85), kTagSetOversampling, "", kCenterText, 12);
view__45->addView(view__48); oversamplingSlider_ = view__48;
auto* const view__49 = createValueMenu(CRect(110, 60, 170, 85), kTagSetPreloadSize, "", kCenterText, 12); view__47->addView(view__48);
preloadSizeSlider_ = view__49; auto* const view__49 = createValueLabel(CRect(15, 20, 95, 45), -1, "Oversampling", kCenterText, 12);
view__45->addView(view__49); view__47->addView(view__49);
auto* const view__50 = createTitleGroup(CRect(170, 161, 585, 261), -1, "Tuning", kCenterText, 12); auto* const view__50 = createValueLabel(CRect(100, 20, 180, 45), -1, "Preload size", kCenterText, 12);
view__44->addView(view__50); view__47->addView(view__50);
auto* const view__51 = createValueLabel(CRect(155, 20, 235, 45), -1, "Root key", kCenterText, 12); auto* const view__51 = createValueMenu(CRect(110, 60, 170, 85), kTagSetPreloadSize, "", kCenterText, 12);
view__50->addView(view__51); preloadSizeSlider_ = view__51;
auto* const view__52 = createValueMenu(CRect(250, 60, 310, 85), kTagSetTuningFrequency, "", kCenterText, 12); view__47->addView(view__51);
tuningFrequencySlider_ = view__52; auto* const view__52 = createTitleGroup(CRect(170, 161, 585, 261), -1, "Tuning", kCenterText, 12);
view__50->addView(view__52); view__46->addView(view__52);
auto* const view__53 = createValueLabel(CRect(240, 20, 320, 45), -1, "Frequency", kCenterText, 12); auto* const view__53 = createValueLabel(CRect(155, 20, 235, 45), -1, "Root key", kCenterText, 12);
view__50->addView(view__53); view__52->addView(view__53);
auto* const view__54 = createStyledKnob(CRect(340, 45, 388, 93), kTagSetStretchedTuning, "", kCenterText, 14); auto* const view__54 = createValueMenu(CRect(250, 60, 310, 85), kTagSetTuningFrequency, "", kCenterText, 12);
stretchedTuningSlider_ = view__54; tuningFrequencySlider_ = view__54;
view__50->addView(view__54); view__52->addView(view__54);
auto* const view__55 = createValueLabel(CRect(325, 20, 405, 45), -1, "Stretch", kCenterText, 12); auto* const view__55 = createValueLabel(CRect(240, 20, 320, 45), -1, "Frequency", kCenterText, 12);
view__50->addView(view__55); view__52->addView(view__55);
auto* const view__56 = createValueLabel(CRect(20, 20, 120, 45), -1, "Scala file", kCenterText, 12); auto* const view__56 = createStyledKnob(CRect(340, 45, 388, 93), kTagSetStretchedTuning, "", kCenterText, 14);
view__50->addView(view__56); stretchedTuningSlider_ = view__56;
auto* const view__57 = createValueButton(CRect(20, 60, 120, 85), kTagLoadScalaFile, "DefaultScale", kCenterText, 12); view__52->addView(view__56);
scalaFileButton_ = view__57; auto* const view__57 = createValueLabel(CRect(325, 20, 405, 45), -1, "Stretch", kCenterText, 12);
view__50->addView(view__57); view__52->addView(view__57);
auto* const view__58 = createValueMenu(CRect(165, 60, 200, 85), kTagSetScalaRootKey, "", kCenterText, 12); auto* const view__58 = createValueLabel(CRect(20, 20, 120, 45), -1, "Scala file", kCenterText, 12);
scalaRootKeySlider_ = view__58; view__52->addView(view__58);
view__50->addView(view__58); auto* const view__59 = createValueButton(CRect(20, 60, 120, 85), kTagLoadScalaFile, "DefaultScale", kCenterText, 12);
auto* const view__59 = createValueMenu(CRect(200, 60, 230, 85), kTagSetScalaRootKey, "", kCenterText, 12); scalaFileButton_ = view__59;
scalaRootOctaveSlider_ = view__59; view__52->addView(view__59);
view__50->addView(view__59); auto* const view__60 = createValueMenu(CRect(165, 60, 200, 85), kTagSetScalaRootKey, "", kCenterText, 12);
auto* const view__60 = createResetSomethingButton(CRect(120, 60, 145, 85), kTagResetScalaFile, "", kCenterText, 12); scalaRootKeySlider_ = view__60;
scalaResetButton_ = view__60; view__52->addView(view__60);
view__50->addView(view__60); auto* const view__61 = createValueMenu(CRect(200, 60, 230, 85), kTagSetScalaRootKey, "", kCenterText, 12);
auto* const view__61 = createTitleGroup(CRect(615, 161, 754, 261), -1, "Files", kCenterText, 12); scalaRootOctaveSlider_ = view__61;
userFilesGroup_ = view__61; view__52->addView(view__61);
view__44->addView(view__61); auto* const view__62 = createResetSomethingButton(CRect(120, 60, 145, 85), kTagResetScalaFile, "", kCenterText, 12);
auto* const view__62 = createValueLabel(CRect(20, 20, 120, 45), -1, "User SFZ folder", kCenterText, 12); scalaResetButton_ = view__62;
view__61->addView(view__62); view__52->addView(view__62);
auto* const view__63 = createValueButton(CRect(20, 60, 120, 85), kTagChooseUserFilesDir, "DefaultPath", kCenterText, 12); auto* const view__63 = createTitleGroup(CRect(615, 161, 754, 261), -1, "Files", kCenterText, 12);
userFilesDirButton_ = view__63; userFilesGroup_ = view__63;
view__61->addView(view__63); view__46->addView(view__63);
auto* const view__64 = createPiano(CRect(5, 400, 795, 470), -1, "", kCenterText, 12); auto* const view__64 = createValueLabel(CRect(20, 20, 120, 45), -1, "User SFZ folder", kCenterText, 12);
piano_ = view__64; view__63->addView(view__64);
view__0->addView(view__64); auto* const view__65 = createValueButton(CRect(20, 60, 120, 85), kTagChooseUserFilesDir, "DefaultPath", kCenterText, 12);
userFilesDirButton_ = view__65;
view__63->addView(view__65);
auto* const view__66 = createPiano(CRect(5, 400, 795, 470), -1, "", kCenterText, 12);
piano_ = view__66;
view__0->addView(view__66);