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
}
Fl_Box keyswitchLabel_ {
label {Key switch:}
xywh {195 45 360 30} labelsize 20 align 20
xywh {265 45 290 30} labelsize 20 align 20
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 {} {
label {Voices:}
xywh {195 78 60 25} labelsize 12 align 24
class Label
}
Fl_Button {} {
comment {tag=kTagPreviousSfzFile} selected
comment {tag=kTagPreviousSfzFile}
xywh {480 18 25 25} labelsize 24
class PreviousFileButton
}

View file

@ -52,7 +52,6 @@ struct Editor::Impl : EditorController::Receiver, IControlListener {
int currentKeyswitch_ = -1;
std::unordered_map<unsigned, std::string> keyswitchNames_;
std::string keyswitchLabelPrefix_;
SharedPointer<CVSTGUITimer> memQueryTimer_;
@ -108,6 +107,8 @@ struct Editor::Impl : EditorController::Receiver, IControlListener {
CControl *stretchedTuningSlider_ = nullptr;
CTextLabel* stretchedTuningLabel_ = nullptr;
CTextLabel* keyswitchLabel_ = nullptr;
CTextLabel* keyswitchInactiveLabel_ = nullptr;
CTextLabel* keyswitchBadge_ = nullptr;
STitleContainer* userFilesGroup_ = nullptr;
STextButton* userFilesDirButton_ = nullptr;
@ -204,6 +205,18 @@ struct Editor::Impl : EditorController::Receiver, IControlListener {
void enterOrLeaveEdit(CControl* ctl, bool enter);
void controlBeginEdit(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)
@ -592,8 +605,8 @@ void Editor::Impl::createFrameContents()
darkTheme.titleBoxBackground = { 0xba, 0xbd, 0xb6 };
darkTheme.icon = darkTheme.text;
darkTheme.iconHighlight = { 0xfd, 0x98, 0x00 };
darkTheme.valueText = { 0x2e, 0x34, 0x36 };
darkTheme.valueBackground = { 0xff, 0xff, 0xff };
darkTheme.valueText = { 0x00, 0x00, 0x00 };
darkTheme.valueBackground = { 0x9a, 0x9a, 0x9a };
darkTheme.knobActiveTrackColor = { 0x00, 0xb6, 0x2a };
darkTheme.knobInactiveTrackColor = { 0x60, 0x60, 0x60 };
darkTheme.knobLineIndicatorColor = { 0xff, 0xff, 0xff };
@ -636,6 +649,16 @@ void Editor::Impl::createFrameContents()
lbl->setFont(font);
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) {
int y = static_cast<int>(0.5 * (bounds.top + bounds.bottom));
CRect lineBounds(bounds.left, y, bounds.right, y + 1);
@ -663,6 +686,18 @@ void Editor::Impl::createFrameContents()
lbl->setFont(font);
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) {
// TODO the volume meter...
CViewContainer* container = new CViewContainer(bounds);
@ -831,10 +866,6 @@ void Editor::Impl::createFrameContents()
mainView_ = owned(mainView);
}
///
if (keyswitchLabel_)
keyswitchLabelPrefix_ = std::string(keyswitchLabel_->getText()) + ' ';
///
SharedPointer<SFileDropTarget> fileDropTarget = owned(new SFileDropTarget);
@ -973,6 +1004,8 @@ void Editor::Impl::createFrameContents()
};
}
updateKeyswitchNameLabel();
///
CViewContainer* panel;
activePanel_ = 0;
@ -1389,9 +1422,32 @@ absl::string_view Editor::Impl::getCurrentKeyswitchName() const
void Editor::Impl::updateKeyswitchNameLabel()
{
if (CTextLabel* label = keyswitchLabel_) {
std::string name { getCurrentKeyswitchName() };
label->setText((keyswitchLabelPrefix_ + name).c_str());
CTextLabel* label = keyswitchLabel_;
CTextLabel* badge = keyswitchBadge_;
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);
sfzFileLabel_ = 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;
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);
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);
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);
auto* const view__16 = createChevronDropDown(CRect(345, 13, 370, 38), kTagFileOperations, "", kCenterText, 24);
fileOperationsMenu_ = view__16;
auto* const view__16 = createPreviousFileButton(CRect(295, 13, 320, 38), kTagPreviousSfzFile, "", kCenterText, 24);
view__8->addView(view__16);
auto* const view__17 = createLabel(CRect(75, 73, 115, 98), -1, "", kCenterText, 12);
infoVoicesLabel_ = view__17;
auto* const view__17 = createNextFileButton(CRect(320, 13, 345, 38), kTagNextSfzFile, "", kCenterText, 24);
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);
auto* const view__19 = createLabel(CRect(175, 73, 210, 98), -1, "", kCenterText, 12);
numVoicesLabel_ = view__19;
auto* const view__19 = createLabel(CRect(75, 73, 115, 98), -1, "", kCenterText, 12);
infoVoicesLabel_ = 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);
auto* const view__21 = createLabel(CRect(305, 73, 365, 98), -1, "", kCenterText, 12);
memoryLabel_ = view__21;
auto* const view__21 = createLabel(CRect(175, 73, 210, 98), -1, "", kCenterText, 12);
numVoicesLabel_ = view__21;
view__8->addView(view__21);
auto* const view__22 = createChevronValueDropDown(CRect(210, 77, 230, 97), kTagSetNumVoices, "", kCenterText, 16);
numVoicesSlider_ = view__22;
auto* const view__22 = createLabel(CRect(240, 73, 300, 98), -1, "Memory:", kRightText, 12);
view__8->addView(view__22);
auto* const view__23 = createRoundedGroup(CRect(570, 5, 795, 105), -1, "", kCenterText, 14);
view__2->addView(view__23);
auto* const view__24 = createKnob48(CRect(45, 15, 93, 63), -1, "", kCenterText, 14);
view__23->addView(view__24);
view__24->setVisible(false);
auto* const view__25 = createValueLabel(CRect(40, 65, 100, 70), -1, "Center", kCenterText, 12);
view__23->addView(view__25);
view__25->setVisible(false);
auto* const view__26 = createStyledKnob(CRect(110, 15, 158, 63), kTagSetVolume, "", kCenterText, 14);
volumeSlider_ = view__26;
view__23->addView(view__26);
auto* const view__27 = createValueLabel(CRect(105, 65, 165, 87), -1, "0.0 dB", kCenterText, 12);
volumeLabel_ = view__27;
view__23->addView(view__27);
auto* const view__28 = createVMeter(CRect(175, 15, 210, 70), -1, "", kCenterText, 14);
view__23->addView(view__28);
auto* const view__23 = createLabel(CRect(305, 73, 365, 98), -1, "", kCenterText, 12);
memoryLabel_ = view__23;
view__8->addView(view__23);
auto* const view__24 = createChevronValueDropDown(CRect(210, 77, 230, 97), kTagSetNumVoices, "", kCenterText, 16);
numVoicesSlider_ = view__24;
view__8->addView(view__24);
auto* const view__25 = createRoundedGroup(CRect(570, 5, 795, 105), -1, "", kCenterText, 14);
view__2->addView(view__25);
auto* const view__26 = createKnob48(CRect(45, 15, 93, 63), -1, "", kCenterText, 14);
view__25->addView(view__26);
view__26->setVisible(false);
auto* const view__27 = createValueLabel(CRect(40, 65, 100, 70), -1, "Center", kCenterText, 12);
view__25->addView(view__27);
view__27->setVisible(false);
auto* const view__28 = createStyledKnob(CRect(110, 15, 158, 63), kTagSetVolume, "", kCenterText, 14);
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);
auto* const view__29 = createLogicalGroup(CRect(5, 110, 796, 395), -1, "", kCenterText, 14);
subPanels_[kPanelGeneral] = view__29;
view__0->addView(view__29);
view__29->setVisible(false);
auto* const view__30 = createRoundedGroup(CRect(0, 0, 175, 280), -1, "", kCenterText, 14);
view__29->addView(view__30);
auto* const view__31 = createLabel(CRect(15, 10, 75, 35), -1, "Curves:", kLeftText, 14);
view__30->addView(view__31);
auto* const view__32 = createLabel(CRect(15, 35, 75, 60), -1, "Masters:", kLeftText, 14);
view__30->addView(view__32);
auto* const view__33 = createLabel(CRect(15, 60, 75, 85), -1, "Groups:", kLeftText, 14);
view__30->addView(view__33);
auto* const view__34 = createLabel(CRect(15, 85, 75, 110), -1, "Regions:", kLeftText, 14);
view__30->addView(view__34);
auto* const view__35 = createLabel(CRect(15, 110, 75, 135), -1, "Samples:", kLeftText, 14);
view__30->addView(view__35);
auto* const view__36 = createLabel(CRect(115, 10, 155, 35), -1, "0", kCenterText, 14);
infoCurvesLabel_ = view__36;
view__30->addView(view__36);
auto* const view__37 = createLabel(CRect(115, 35, 155, 60), -1, "0", kCenterText, 14);
infoMastersLabel_ = view__37;
view__30->addView(view__37);
auto* const view__38 = createLabel(CRect(115, 60, 155, 85), -1, "0", kCenterText, 14);
infoGroupsLabel_ = view__38;
view__30->addView(view__38);
auto* const view__39 = createLabel(CRect(115, 85, 155, 110), -1, "0", kCenterText, 14);
infoRegionsLabel_ = view__39;
view__30->addView(view__39);
auto* const view__40 = createLabel(CRect(115, 110, 155, 135), -1, "0", kCenterText, 14);
infoSamplesLabel_ = view__40;
view__30->addView(view__40);
auto* const view__41 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14);
subPanels_[kPanelControls] = view__41;
view__0->addView(view__41);
view__41->setVisible(false);
auto* const view__42 = createRoundedGroup(CRect(0, 0, 790, 285), -1, "", kCenterText, 14);
view__41->addView(view__42);
auto* const view__43 = createControlsPanel(CRect(0, 0, 790, 285), -1, "", kCenterText, 14);
controlsPanel_ = view__43;
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);
auto* const view__31 = createLogicalGroup(CRect(5, 110, 796, 395), -1, "", kCenterText, 14);
subPanels_[kPanelGeneral] = view__31;
view__0->addView(view__31);
view__31->setVisible(false);
auto* const view__32 = createRoundedGroup(CRect(0, 0, 175, 280), -1, "", kCenterText, 14);
view__31->addView(view__32);
auto* const view__33 = createLabel(CRect(15, 10, 75, 35), -1, "Curves:", kLeftText, 14);
view__32->addView(view__33);
auto* const view__34 = createLabel(CRect(15, 35, 75, 60), -1, "Masters:", kLeftText, 14);
view__32->addView(view__34);
auto* const view__35 = createLabel(CRect(15, 60, 75, 85), -1, "Groups:", kLeftText, 14);
view__32->addView(view__35);
auto* const view__36 = createLabel(CRect(15, 85, 75, 110), -1, "Regions:", kLeftText, 14);
view__32->addView(view__36);
auto* const view__37 = createLabel(CRect(15, 110, 75, 135), -1, "Samples:", kLeftText, 14);
view__32->addView(view__37);
auto* const view__38 = createLabel(CRect(115, 10, 155, 35), -1, "0", kCenterText, 14);
infoCurvesLabel_ = view__38;
view__32->addView(view__38);
auto* const view__39 = createLabel(CRect(115, 35, 155, 60), -1, "0", kCenterText, 14);
infoMastersLabel_ = view__39;
view__32->addView(view__39);
auto* const view__40 = createLabel(CRect(115, 60, 155, 85), -1, "0", kCenterText, 14);
infoGroupsLabel_ = view__40;
view__32->addView(view__40);
auto* const view__41 = createLabel(CRect(115, 85, 155, 110), -1, "0", kCenterText, 14);
infoRegionsLabel_ = view__41;
view__32->addView(view__41);
auto* const view__42 = createLabel(CRect(115, 110, 155, 135), -1, "0", kCenterText, 14);
infoSamplesLabel_ = view__42;
view__32->addView(view__42);
auto* const view__43 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14);
subPanels_[kPanelControls] = view__43;
view__0->addView(view__43);
view__43->setVisible(false);
auto* const view__44 = createRoundedGroup(CRect(0, 0, 790, 285), -1, "", kCenterText, 14);
view__43->addView(view__44);
auto* const view__45 = createControlsPanel(CRect(0, 0, 790, 285), -1, "", kCenterText, 14);
controlsPanel_ = view__45;
view__44->addView(view__45);
auto* const view__46 = createValueMenu(CRect(25, 60, 85, 85), kTagSetOversampling, "", kCenterText, 12);
oversamplingSlider_ = view__46;
view__45->addView(view__46);
auto* const view__47 = createValueLabel(CRect(15, 20, 95, 45), -1, "Oversampling", kCenterText, 12);
view__45->addView(view__47);
auto* const view__48 = createValueLabel(CRect(100, 20, 180, 45), -1, "Preload size", kCenterText, 12);
view__45->addView(view__48);
auto* const view__49 = createValueMenu(CRect(110, 60, 170, 85), kTagSetPreloadSize, "", kCenterText, 12);
preloadSizeSlider_ = view__49;
view__45->addView(view__49);
auto* const view__50 = createTitleGroup(CRect(170, 161, 585, 261), -1, "Tuning", kCenterText, 12);
view__44->addView(view__50);
auto* const view__51 = createValueLabel(CRect(155, 20, 235, 45), -1, "Root key", kCenterText, 12);
view__50->addView(view__51);
auto* const view__52 = createValueMenu(CRect(250, 60, 310, 85), kTagSetTuningFrequency, "", kCenterText, 12);
tuningFrequencySlider_ = view__52;
view__50->addView(view__52);
auto* const view__53 = createValueLabel(CRect(240, 20, 320, 45), -1, "Frequency", kCenterText, 12);
view__50->addView(view__53);
auto* const view__54 = createStyledKnob(CRect(340, 45, 388, 93), kTagSetStretchedTuning, "", kCenterText, 14);
stretchedTuningSlider_ = view__54;
view__50->addView(view__54);
auto* const view__55 = createValueLabel(CRect(325, 20, 405, 45), -1, "Stretch", kCenterText, 12);
view__50->addView(view__55);
auto* const view__56 = createValueLabel(CRect(20, 20, 120, 45), -1, "Scala file", kCenterText, 12);
view__50->addView(view__56);
auto* const view__57 = createValueButton(CRect(20, 60, 120, 85), kTagLoadScalaFile, "DefaultScale", kCenterText, 12);
scalaFileButton_ = view__57;
view__50->addView(view__57);
auto* const view__58 = createValueMenu(CRect(165, 60, 200, 85), kTagSetScalaRootKey, "", kCenterText, 12);
scalaRootKeySlider_ = view__58;
view__50->addView(view__58);
auto* const view__59 = createValueMenu(CRect(200, 60, 230, 85), kTagSetScalaRootKey, "", kCenterText, 12);
scalaRootOctaveSlider_ = view__59;
view__50->addView(view__59);
auto* const view__60 = createResetSomethingButton(CRect(120, 60, 145, 85), kTagResetScalaFile, "", kCenterText, 12);
scalaResetButton_ = view__60;
view__50->addView(view__60);
auto* const view__61 = createTitleGroup(CRect(615, 161, 754, 261), -1, "Files", kCenterText, 12);
userFilesGroup_ = view__61;
view__44->addView(view__61);
auto* const view__62 = createValueLabel(CRect(20, 20, 120, 45), -1, "User SFZ folder", kCenterText, 12);
view__61->addView(view__62);
auto* const view__63 = createValueButton(CRect(20, 60, 120, 85), kTagChooseUserFilesDir, "DefaultPath", kCenterText, 12);
userFilesDirButton_ = view__63;
view__61->addView(view__63);
auto* const view__64 = createPiano(CRect(5, 400, 795, 470), -1, "", kCenterText, 12);
piano_ = view__64;
view__0->addView(view__64);
auto* const view__46 = createLogicalGroup(CRect(5, 109, 795, 425), -1, "", kCenterText, 14);
subPanels_[kPanelSettings] = view__46;
view__0->addView(view__46);
auto* const view__47 = createTitleGroup(CRect(300, 26, 495, 126), -1, "Engine", kCenterText, 12);
view__46->addView(view__47);
auto* const view__48 = createValueMenu(CRect(25, 60, 85, 85), kTagSetOversampling, "", kCenterText, 12);
oversamplingSlider_ = view__48;
view__47->addView(view__48);
auto* const view__49 = createValueLabel(CRect(15, 20, 95, 45), -1, "Oversampling", kCenterText, 12);
view__47->addView(view__49);
auto* const view__50 = createValueLabel(CRect(100, 20, 180, 45), -1, "Preload size", kCenterText, 12);
view__47->addView(view__50);
auto* const view__51 = createValueMenu(CRect(110, 60, 170, 85), kTagSetPreloadSize, "", kCenterText, 12);
preloadSizeSlider_ = view__51;
view__47->addView(view__51);
auto* const view__52 = createTitleGroup(CRect(170, 161, 585, 261), -1, "Tuning", kCenterText, 12);
view__46->addView(view__52);
auto* const view__53 = createValueLabel(CRect(155, 20, 235, 45), -1, "Root key", kCenterText, 12);
view__52->addView(view__53);
auto* const view__54 = createValueMenu(CRect(250, 60, 310, 85), kTagSetTuningFrequency, "", kCenterText, 12);
tuningFrequencySlider_ = view__54;
view__52->addView(view__54);
auto* const view__55 = createValueLabel(CRect(240, 20, 320, 45), -1, "Frequency", kCenterText, 12);
view__52->addView(view__55);
auto* const view__56 = createStyledKnob(CRect(340, 45, 388, 93), kTagSetStretchedTuning, "", kCenterText, 14);
stretchedTuningSlider_ = view__56;
view__52->addView(view__56);
auto* const view__57 = createValueLabel(CRect(325, 20, 405, 45), -1, "Stretch", kCenterText, 12);
view__52->addView(view__57);
auto* const view__58 = createValueLabel(CRect(20, 20, 120, 45), -1, "Scala file", kCenterText, 12);
view__52->addView(view__58);
auto* const view__59 = createValueButton(CRect(20, 60, 120, 85), kTagLoadScalaFile, "DefaultScale", kCenterText, 12);
scalaFileButton_ = view__59;
view__52->addView(view__59);
auto* const view__60 = createValueMenu(CRect(165, 60, 200, 85), kTagSetScalaRootKey, "", kCenterText, 12);
scalaRootKeySlider_ = view__60;
view__52->addView(view__60);
auto* const view__61 = createValueMenu(CRect(200, 60, 230, 85), kTagSetScalaRootKey, "", kCenterText, 12);
scalaRootOctaveSlider_ = view__61;
view__52->addView(view__61);
auto* const view__62 = createResetSomethingButton(CRect(120, 60, 145, 85), kTagResetScalaFile, "", kCenterText, 12);
scalaResetButton_ = view__62;
view__52->addView(view__62);
auto* const view__63 = createTitleGroup(CRect(615, 161, 754, 261), -1, "Files", kCenterText, 12);
userFilesGroup_ = view__63;
view__46->addView(view__63);
auto* const view__64 = createValueLabel(CRect(20, 20, 120, 45), -1, "User SFZ folder", kCenterText, 12);
view__63->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);