Tweaking the GUI

The instrument information can be on the main tab
Put the button behind the logo
Embed the ABeeZee font and use it everywhere
Add hover colors to glyph buttons
Replace the "file open" glyph by a folder
This commit is contained in:
Paul Ferrand 2020-09-11 03:23:39 +02:00
parent 279382a7b2
commit 59c64bcb91
8 changed files with 269 additions and 279 deletions

View file

@ -5,11 +5,14 @@ set(EDITOR_RESOURCES
logo.png
logo_text.png
logo_text@2x.png
logo_full_white.png
icon_white.png
icon_white@2x.png
knob48.png
knob48@2x.png
Fonts/fluentui-system-regular-20.ttf
Fonts/ABeeZee-Regular.ttf
Fonts/ABeeZee-Regular.ttf
PARENT_SCOPE)
function(copy_editor_resources SOURCE_DIR DESTINATION_DIR)

View file

@ -1,9 +1,9 @@
# data file for the Fltk User Interface Designer (fluid)
version 1.0305
version 1.0304
header_name {.h}
code_name {.cxx}
widget_class mainView {open
xywh {410 523 800 475} type Double
xywh {572 266 800 475} type Double
class LogicalGroup visible
} {
Fl_Group {} {
@ -12,112 +12,104 @@ widget_class mainView {open
class LogicalGroup
} {
Fl_Group {} {open
xywh {5 4 100 101} box ROUNDED_BOX align 0
xywh {5 4 175 101} box ROUNDED_BOX align 0
class RoundedGroup
} {
Fl_Box {} {
comment {tag=kTagFirstChangePanel+kPanelGeneral}
image {../resources/icon_white.png} xywh {7 6 96 96}
image {../resources/logo_full_white.png} xywh {10 11 165 63}
class SfizzMainButton
}
Fl_Button {} {
comment {tag=kTagFirstChangePanel+kPanelGeneral}
xywh {55 75 25 25} labelsize 24
class HomeButton
}
Fl_Button {} {
comment {tag=kTagFirstChangePanel+kPanelControls}
xywh {80 75 25 25} labelsize 24
class CCButton
}
Fl_Button {} {
comment {tag=kTagFirstChangePanel+kPanelSettings}
xywh {105 75 25 25} labelsize 24
class SettingsButton
}
}
Fl_Group {} {open
xywh {110 5 380 100} box ROUNDED_BOX
xywh {185 5 380 100} box ROUNDED_BOX
class RoundedGroup
} {
Fl_Box {} {
label {File:}
xywh {125 15 40 25} labelsize 16
xywh {200 13 40 30} labelsize 16
class Label
}
Fl_Box {} {
label {KS:}
xywh {125 45 40 25} labelsize 16
xywh {200 45 40 30} labelsize 16
class Label
}
Fl_Box {} {
label {Separator 1}
xywh {120 40 355 5} box BORDER_BOX labeltype NO_LABEL
xywh {195 41 360 5} box BORDER_BOX labeltype NO_LABEL
class HLine
}
Fl_Box {} {
label {Separator 2}
xywh {120 70 355 5} box BORDER_BOX labeltype NO_LABEL
xywh {195 73 360 5} box BORDER_BOX labeltype NO_LABEL
class HLine
}
Fl_Box sfzFileLabel_ {
label {DefaultInstrument.sfz}
xywh {190 15 230 25} labelsize 20
xywh {265 12 230 30} labelsize 20
class Label
}
Fl_Box {} {
label {Key switch}
xywh {190 45 230 25} labelsize 20
xywh {265 44 230 30} labelsize 20
class Label
}
Fl_Box {} {
label {Voices:}
xywh {120 75 60 25} labelsize 12 align 24
xywh {195 76 60 25} labelsize 12 align 24
class Label
}
Fl_Button {} {
comment {tag=kTagLoadSfzFile}
xywh {425 15 25 25} labelsize 24
xywh {500 14 25 25} labelsize 24
class LoadFileButton
}
Fl_Button {} {
comment {tag=kTagEditSfzFile}
xywh {450 15 25 25} labelsize 24
xywh {525 14 25 25} labelsize 24
class EditFileButton
}
Fl_Box infoVoicesLabel_ {
xywh {185 75 50 25} labelsize 12 align 16
xywh {260 76 50 25} labelsize 12 align 16
class Label
}
Fl_Box {} {
label {Max:}
xywh {240 75 60 25} labelsize 12 align 24
xywh {315 76 60 25} labelsize 12 align 24
class Label
}
Fl_Box numVoicesLabel_ {
xywh {305 75 50 25} labelsize 12 align 16
xywh {380 76 50 25} labelsize 12 align 16
class Label
}
Fl_Box {} {
label {Memory:}
xywh {360 75 60 25} labelsize 12 align 24
xywh {435 76 60 25} labelsize 12 align 24
class Label
}
Fl_Box memoryLabel_ {
xywh {425 75 50 25} labelsize 12 align 16
xywh {500 76 50 25} labelsize 12 align 16
class Label
}
}
Fl_Group {} {open
xywh {495 5 100 100} box ROUNDED_BOX
class RoundedGroup
} {
Fl_Light_Button {} {
label SETUP
comment {tag=kTagFirstChangePanel+kPanelSettings}
xywh {510 42 70 25}
class LightButton
}
Fl_Light_Button {} {
label CC
comment {tag=kTagFirstChangePanel+kPanelControls}
xywh {510 15 70 25}
class LightButton
}
Fl_Light_Button {} {
label INFO
comment {tag=kTagFirstChangePanel+kPanelInfo}
xywh {510 69 70 25}
class LightButton
}
}
Fl_Group {} {open
xywh {600 5 195 100} box ROUNDED_BOX
xywh {570 5 225 100} box ROUNDED_BOX
class RoundedGroup
} {
Fl_Dial {} {
@ -126,7 +118,7 @@ widget_class mainView {open
}
Fl_Box {} {
label Center
xywh {610 70 60 25} labelsize 12 hide
xywh {610 70 60 5} labelsize 12 hide
class ValueLabel
}
Fl_Dial volumeSlider_ {
@ -136,83 +128,74 @@ widget_class mainView {open
}
Fl_Box volumeLabel_ {
label {0.0 dB}
xywh {675 70 60 25} labelsize 12
xywh {675 70 60 22} labelsize 12
class ValueLabel
}
Fl_Box {} {
xywh {745 20 35 70} box BORDER_BOX
xywh {745 20 35 55} box BORDER_BOX
class VMeter
}
}
}
Fl_Group {subPanels_[kPanelGeneral]} {
xywh {5 110 790 285} hide
Fl_Group {subPanels_[kPanelGeneral]} {open selected
xywh {5 110 791 285}
class LogicalGroup
} {
Fl_Group {} {open
xywh {5 110 120 285} box ROUNDED_BOX
xywh {5 110 175 280} box ROUNDED_BOX
class RoundedGroup
} {
Fl_Box {} {
label {Curves:}
xywh {15 120 60 25} labelsize 12 align 20
xywh {20 120 60 25} align 20
class Label
}
Fl_Box {} {
label {Masters:}
xywh {15 145 60 25} labelsize 12 align 20
xywh {20 145 60 25} align 20
class Label
}
Fl_Box {} {
label {Groups:}
xywh {15 170 60 25} labelsize 12 align 20
xywh {20 170 60 25} align 20
class Label
}
Fl_Box {} {
label {Regions:}
xywh {15 195 60 25} labelsize 12 align 20
xywh {20 195 60 25} align 20
class Label
}
Fl_Box {} {
label {Samples:}
xywh {15 220 60 25} labelsize 12 align 20
xywh {20 220 60 25} align 20
class Label
}
Fl_Box infoCurvesLabel_ {
label 0
xywh {75 120 40 25} labelsize 12 align 16
xywh {120 120 40 25} align 16
class Label
}
Fl_Box infoMastersLabel_ {
label 0
xywh {75 145 40 25} labelsize 12 align 16
xywh {120 145 40 25} align 16
class Label
}
Fl_Box infoGroupsLabel_ {
label 0
xywh {75 170 40 25} labelsize 12 align 16
xywh {120 170 40 25} align 16
class Label
}
Fl_Box infoRegionsLabel_ {
label 0
xywh {75 195 40 25} labelsize 12 align 16
xywh {120 195 40 25} align 16
class Label
}
Fl_Box infoSamplesLabel_ {
label 0
xywh {75 220 40 25} labelsize 12 align 16
xywh {120 220 40 25} align 16
class Label
}
}
Fl_Group {} {open
xywh {130 110 665 280}
class LogicalGroup
} {
Fl_Box {} {
image {../resources/logo_text.png} xywh {260 125 400 250}
class SfizzLargePicture
}
}
}
Fl_Group {subPanels_[kPanelControls]} {
xywh {5 110 790 285} hide
@ -229,114 +212,99 @@ widget_class mainView {open
}
}
}
Fl_Group {subPanels_[kPanelSettings]} {open
xywh {5 110 790 285}
Fl_Group {subPanels_[kPanelSettings]} {
xywh {5 109 790 286} hide
class LogicalGroup
} {
Fl_Group {} {
label Engine open selected
xywh {260 125 280 110} box ROUNDED_BOX labelsize 12 align 17
label Engine open
xywh {260 110 280 110} box ROUNDED_BOX labelsize 12 align 17
class TitleGroup
} {
Fl_Spinner numVoicesSlider_ {
comment {tag=kTagSetNumVoices}
xywh {285 185 60 25} labelsize 12 textsize 12
xywh {285 170 60 25} labelsize 12 textsize 12
class ValueMenu
}
Fl_Box {} {
label Polyphony
xywh {275 145 80 25} labelsize 12
xywh {275 130 80 25} labelsize 12
class ValueLabel
}
Fl_Spinner oversamplingSlider_ {
comment {tag=kTagSetOversampling}
xywh {370 185 60 25} labelsize 12 textsize 12
xywh {370 170 60 25} labelsize 12 textsize 12
class ValueMenu
}
Fl_Box {} {
label Oversampling
xywh {360 145 80 25} labelsize 12
xywh {360 130 80 25} labelsize 12
class ValueLabel
}
Fl_Box {} {
label {Preload size}
xywh {445 145 80 25} labelsize 12
xywh {445 130 80 25} labelsize 12
class ValueLabel
}
Fl_Spinner preloadSizeSlider_ {
comment {tag=kTagSetPreloadSize}
xywh {455 185 60 25} labelsize 12 textsize 12
xywh {455 170 60 25} labelsize 12 textsize 12
class ValueMenu
}
}
Fl_Group {} {
label Tuning open
xywh {205 260 390 120} box ROUNDED_BOX labelsize 12 align 17
xywh {205 268 390 120} box ROUNDED_BOX labelsize 12 align 17
class TitleGroup
} {
Fl_Box {} {
label {Root key}
xywh {330 280 80 25} labelsize 12
xywh {330 288 80 25} labelsize 12
class ValueLabel
}
Fl_Spinner tuningFrequencySlider_ {
comment {tag=kTagSetTuningFrequency}
xywh {425 320 60 25} labelsize 12 textsize 12
xywh {425 328 60 25} labelsize 12 textsize 12
class ValueMenu
}
Fl_Box {} {
label Frequency
xywh {415 280 80 25} labelsize 12
xywh {415 288 80 25} labelsize 12
class ValueLabel
}
Fl_Dial stretchedTuningSlider_ {
comment {tag=kTagSetStretchedTuning}
xywh {515 305 48 48} value 0.5
xywh {515 313 48 48} value 0.5
class Knob48
}
Fl_Box {} {
label Stretch
xywh {500 280 80 25} labelsize 12
xywh {500 288 80 25} labelsize 12
class ValueLabel
}
Fl_Box {} {
label {Scala file}
xywh {225 280 100 25} labelsize 12
xywh {225 288 100 25} labelsize 12
class ValueLabel
}
Fl_Button scalaFileButton_ {
label DefaultScale
comment {tag=kTagLoadScalaFile}
xywh {225 320 100 25} labelsize 12
xywh {225 328 100 25} labelsize 12
class ValueButton
}
Fl_Spinner scalaRootKeySlider_ {
comment {tag=kTagSetScalaRootKey}
xywh {340 320 35 25} labelsize 12 textsize 12
xywh {340 328 35 25} labelsize 12 textsize 12
class ValueMenu
}
Fl_Spinner scalaRootOctaveSlider_ {
comment {tag=kTagSetScalaRootKey}
xywh {375 320 30 25} labelsize 12 textsize 12
xywh {375 328 30 25} labelsize 12 textsize 12
class ValueMenu
}
}
}
Fl_Group {subPanels_[kPanelInfo]} {
xywh {5 110 790 285} hide
class LogicalGroup
} {
Fl_Group {} {open
xywh {5 110 790 285} box ROUNDED_BOX
class RoundedGroup
} {
Fl_Box {} {
label {Informative text goes here}
xywh {5 110 790 285} labelsize 40
class Label
}
}
}
Fl_Box {} {
xywh {5 400 790 70}
class Piano

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -35,7 +35,6 @@ struct Editor::Impl : EditorController::Receiver, IControlListener {
kPanelGeneral,
kPanelControls,
kPanelSettings,
kPanelInfo,
kNumPanels,
};
@ -314,12 +313,38 @@ void Editor::Impl::uiReceiveValue(EditId id, const EditValue& v)
break;
}
}
class CHoverButton: public CTextButton {
public:
CHoverButton(const CRect& size, IControlListener* listener = nullptr, int32_t tag = -1, UTF8StringPtr title = nullptr)
: CTextButton(size, listener, tag, title) {}
void setHoverColor(const CColor& color)
{
hoverColor = color;
}
CMouseEventResult onMouseEntered (CPoint& where, const CButtonState& buttons) override
{
backupColor = getTextColor();
setTextColor(hoverColor);
return CTextButton::onMouseEntered(where, buttons);
}
CMouseEventResult onMouseExited (CPoint& where, const CButtonState& buttons) override
{
setTextColor(backupColor);
return CTextButton::onMouseExited(where, buttons);
}
private:
CColor hoverColor;
CColor backupColor;
};
void Editor::Impl::createFrameContents()
{
CViewContainer* mainView;
SharedPointer<CBitmap> iconWhite = owned(new CBitmap("icon_white.png"));
SharedPointer<CBitmap> iconWhite = owned(new CBitmap("logo_full_white.png"));
SharedPointer<CBitmap> knob48 = owned(new CBitmap("knob48.png"));
SharedPointer<CBitmap> logoText = owned(new CBitmap("logo_text.png"));
@ -332,6 +357,7 @@ void Editor::Impl::createFrameContents()
CColor titleBoxText;
CColor titleBoxBackground;
CColor icon;
CColor iconHighlight;
CColor valueText;
CColor valueBackground;
};
@ -342,6 +368,7 @@ void Editor::Impl::createFrameContents()
lightTheme.titleBoxText = { 0xff, 0xff, 0xff };
lightTheme.titleBoxBackground = { 0x2e, 0x34, 0x36 };
lightTheme.icon = lightTheme.text;
lightTheme.iconHighlight = { 0xa8, 0x62, 0x34 };
lightTheme.valueText = { 0xff, 0xff, 0xff };
lightTheme.valueBackground = { 0x2e, 0x34, 0x36 };
Theme darkTheme;
@ -350,6 +377,7 @@ void Editor::Impl::createFrameContents()
darkTheme.titleBoxText = { 0x00, 0x00, 0x00 };
darkTheme.titleBoxBackground = { 0xba, 0xbd, 0xb6 };
darkTheme.icon = darkTheme.text;
darkTheme.iconHighlight = { 0xa8, 0x62, 0x34 };
darkTheme.valueText = { 0x2e, 0x34, 0x36 };
darkTheme.valueBackground = { 0xff, 0xff, 0xff };
Theme& defaultTheme = lightTheme;
@ -363,18 +391,19 @@ void Editor::Impl::createFrameContents()
typedef CKickButton SfizzMainButton;
typedef CTextLabel Label;
typedef CViewContainer HLine;
typedef CTextButton LightButton;
typedef CAnimKnob Knob48;
typedef CTextLabel ValueLabel;
typedef CViewContainer VMeter;
typedef CView SfizzLargePicture;
typedef SValueMenu ValueMenu;
#if 0
typedef CTextButton Button;
#endif
typedef CTextButton ValueButton;
typedef CTextButton LoadFileButton;
typedef CTextButton EditFileButton;
typedef CHoverButton LoadFileButton;
typedef CHoverButton CCButton;
typedef CHoverButton HomeButton;
typedef CHoverButton SettingsButton;
typedef CHoverButton EditFileButton;
typedef SPiano Piano;
auto createLogicalGroup = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) {
@ -394,7 +423,7 @@ void Editor::Impl::createFrameContents()
box->setBackgroundColor(theme->boxBackground);
box->setTitleFontColor(theme->titleBoxText);
box->setTitleBackgroundColor(theme->titleBoxBackground);
auto font = owned(new CFontDesc(*box->getTitleFont()));
auto font = owned(new CFontDesc("ABeeZee", fontsize));
font->setSize(fontsize);
box->setTitleFont(font);
return box;
@ -408,7 +437,7 @@ void Editor::Impl::createFrameContents()
lbl->setBackColor(CColor(0x00, 0x00, 0x00, 0x00));
lbl->setFontColor(theme->text);
lbl->setHoriAlign(align);
auto font = owned(new CFontDesc(*lbl->getFont()));
auto font = owned(new CFontDesc("ABeeZee", fontsize));
font->setSize(fontsize);
lbl->setFont(font);
return lbl;
@ -420,11 +449,6 @@ void Editor::Impl::createFrameContents()
hline->setBackgroundColor(CColor(0xff, 0xff, 0xff, 0xff));
return hline;
};
auto createLightButton = [this](const CRect& bounds, int tag, const char* label, CHoriTxtAlign align, int) {
CTextButton* button = new CTextButton(bounds, this, tag, label);
button->setTextAlignment(align);
return button;
};
auto createKnob48 = [this, &knob48](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int) {
return new CAnimKnob(bounds, this, tag, 31, 48, knob48);
};
@ -434,7 +458,7 @@ void Editor::Impl::createFrameContents()
lbl->setBackColor(CColor(0x00, 0x00, 0x00, 0x00));
lbl->setFontColor(theme->text);
lbl->setHoriAlign(align);
auto font = owned(new CFontDesc(*lbl->getFont()));
auto font = owned(new CFontDesc("ABeeZee", fontsize));
font->setSize(fontsize);
lbl->setFont(font);
return lbl;
@ -445,11 +469,6 @@ void Editor::Impl::createFrameContents()
container->setBackgroundColor(CColor(0x00, 0x00, 0x00, 0x00));
return container;
};
auto createSfizzLargePicture = [&logoText](const CRect& bounds, int, const char*, CHoriTxtAlign, int) {
CView* picture = new CView(bounds);
picture->setBackground(logoText);
return picture;
};
#if 0
auto createButton = [this](const CRect& bounds, int tag, const char* label, CHoriTxtAlign align, int fontsize) {
CTextButton* button = new CTextButton(bounds, this, tag, label);
@ -462,7 +481,7 @@ void Editor::Impl::createFrameContents()
#endif
auto createValueButton = [this, &theme](const CRect& bounds, int tag, const char* label, CHoriTxtAlign align, int fontsize) {
CTextButton* button = new CTextButton(bounds, this, tag, label);
auto font = owned(new CFontDesc(*button->getFont()));
auto font = owned(new CFontDesc("ABeeZee", fontsize));
font->setSize(fontsize);
button->setFont(font);
button->setTextAlignment(align);
@ -476,7 +495,7 @@ void Editor::Impl::createFrameContents()
auto createValueMenu = [this, &theme](const CRect& bounds, int tag, const char*, CHoriTxtAlign align, int fontsize) {
SValueMenu* vm = new SValueMenu(bounds, this, tag);
vm->setHoriAlign(align);
auto font = owned(new CFontDesc(*vm->getFont()));
auto font = owned(new CFontDesc("ABeeZee", fontsize));
font->setSize(fontsize);
vm->setFont(font);
vm->setFontColor(theme->valueText);
@ -487,19 +506,30 @@ void Editor::Impl::createFrameContents()
return vm;
};
auto createGlyphButton = [this, &theme](UTF8StringPtr glyph, const CRect& bounds, int tag, int fontsize) {
CTextButton* btn = new CTextButton(bounds, this, tag, glyph);
CHoverButton* btn = new CHoverButton(bounds, this, tag, glyph);
btn->setFont(new CFontDesc("Fluent System Regular W20", fontsize));
btn->setTextColor(theme->icon);
btn->setHoverColor(theme->iconHighlight);
btn->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00));
btn->setGradient(nullptr);
btn->setGradientHighlighted(nullptr);
return btn;
};
auto createLoadFileButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue142", bounds, tag, fontsize);
auto createHomeButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue1d6", bounds, tag, fontsize);
};
auto createCCButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
// return createGlyphButton(u8"\ue240", bounds, tag, fontsize);
return createGlyphButton(u8"\ue140", bounds, tag, fontsize);
};
auto createSettingsButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue2e4", bounds, tag, fontsize);
};
auto createEditFileButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue148", bounds, tag, fontsize);
return createGlyphButton(u8"\ue142", bounds, tag, fontsize);
};
auto createLoadFileButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue1a3", bounds, tag, fontsize);
};
auto createPiano = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) {
SPiano* piano = new SPiano(bounds);

View file

@ -408,6 +408,9 @@ CMouseEventResult SValueMenu::onMouseDown(CPoint& where, const CButtonState& but
menu->addEntry(item);
item->remember(); // above call does not increment refcount
}
menu->setFont(self->getFont());
menu->setFontColor(self->getFontColor());
menu->setBackColor(self->getBackColor());
menu->popup(frame, frameWhere + CPoint(0.0, 1.0));
}
});

View file

@ -4,164 +4,150 @@ mainView = view__0;
enterTheme(darkTheme);
LogicalGroup* const view__1 = createLogicalGroup(CRect(0, 0, 800, 110), -1, "", kCenterText, 14);
view__0->addView(view__1);
RoundedGroup* const view__2 = createRoundedGroup(CRect(5, 4, 105, 105), -1, "", kCenterText, 14);
RoundedGroup* const view__2 = createRoundedGroup(CRect(5, 4, 180, 105), -1, "", kCenterText, 14);
view__1->addView(view__2);
SfizzMainButton* const view__3 = createSfizzMainButton(CRect(2, 2, 98, 98), kTagFirstChangePanel+kPanelGeneral, "", kCenterText, 14);
SfizzMainButton* const view__3 = createSfizzMainButton(CRect(5, 7, 170, 70), kTagFirstChangePanel+kPanelGeneral, "", kCenterText, 14);
view__2->addView(view__3);
RoundedGroup* const view__4 = createRoundedGroup(CRect(110, 5, 490, 105), -1, "", kCenterText, 14);
view__1->addView(view__4);
Label* const view__5 = createLabel(CRect(15, 10, 55, 35), -1, "File:", kCenterText, 16);
view__4->addView(view__5);
Label* const view__6 = createLabel(CRect(15, 40, 55, 65), -1, "KS:", kCenterText, 16);
view__4->addView(view__6);
HLine* const view__7 = createHLine(CRect(10, 35, 365, 40), -1, "", kCenterText, 14);
view__4->addView(view__7);
HLine* const view__8 = createHLine(CRect(10, 65, 365, 70), -1, "", kCenterText, 14);
view__4->addView(view__8);
Label* const view__9 = createLabel(CRect(80, 10, 310, 35), -1, "DefaultInstrument.sfz", kCenterText, 20);
sfzFileLabel_ = view__9;
view__4->addView(view__9);
Label* const view__10 = createLabel(CRect(80, 40, 310, 65), -1, "Key switch", kCenterText, 20);
view__4->addView(view__10);
Label* const view__11 = createLabel(CRect(10, 70, 70, 95), -1, "Voices:", kRightText, 12);
view__4->addView(view__11);
LoadFileButton* const view__12 = createLoadFileButton(CRect(315, 10, 340, 35), kTagLoadSfzFile, "", kCenterText, 24);
view__4->addView(view__12);
EditFileButton* const view__13 = createEditFileButton(CRect(340, 10, 365, 35), kTagEditSfzFile, "", kCenterText, 24);
view__4->addView(view__13);
Label* const view__14 = createLabel(CRect(75, 70, 125, 95), -1, "", kCenterText, 12);
infoVoicesLabel_ = view__14;
view__4->addView(view__14);
Label* const view__15 = createLabel(CRect(130, 70, 190, 95), -1, "Max:", kRightText, 12);
view__4->addView(view__15);
Label* const view__16 = createLabel(CRect(195, 70, 245, 95), -1, "", kCenterText, 12);
numVoicesLabel_ = view__16;
view__4->addView(view__16);
Label* const view__17 = createLabel(CRect(250, 70, 310, 95), -1, "Memory:", kRightText, 12);
view__4->addView(view__17);
Label* const view__18 = createLabel(CRect(315, 70, 365, 95), -1, "", kCenterText, 12);
memoryLabel_ = view__18;
view__4->addView(view__18);
RoundedGroup* const view__19 = createRoundedGroup(CRect(495, 5, 595, 105), -1, "", kCenterText, 14);
view__1->addView(view__19);
LightButton* const view__20 = createLightButton(CRect(15, 37, 85, 62), kTagFirstChangePanel+kPanelSettings, "SETUP", kCenterText, 14);
view__19->addView(view__20);
LightButton* const view__21 = createLightButton(CRect(15, 10, 85, 35), kTagFirstChangePanel+kPanelControls, "CC", kCenterText, 14);
view__19->addView(view__21);
LightButton* const view__22 = createLightButton(CRect(15, 64, 85, 89), kTagFirstChangePanel+kPanelInfo, "INFO", kCenterText, 14);
view__19->addView(view__22);
RoundedGroup* const view__23 = createRoundedGroup(CRect(600, 5, 795, 105), -1, "", kCenterText, 14);
view__1->addView(view__23);
Knob48* const view__24 = createKnob48(CRect(15, 15, 63, 63), -1, "", kCenterText, 14);
view__23->addView(view__24);
HomeButton* const view__4 = createHomeButton(CRect(50, 71, 75, 96), kTagFirstChangePanel+kPanelGeneral, "", kCenterText, 24);
view__2->addView(view__4);
CCButton* const view__5 = createCCButton(CRect(75, 71, 100, 96), kTagFirstChangePanel+kPanelControls, "", kCenterText, 24);
view__2->addView(view__5);
SettingsButton* const view__6 = createSettingsButton(CRect(100, 71, 125, 96), kTagFirstChangePanel+kPanelSettings, "", kCenterText, 24);
view__2->addView(view__6);
RoundedGroup* const view__7 = createRoundedGroup(CRect(185, 5, 565, 105), -1, "", kCenterText, 14);
view__1->addView(view__7);
Label* const view__8 = createLabel(CRect(15, 8, 55, 38), -1, "File:", kCenterText, 16);
view__7->addView(view__8);
Label* const view__9 = createLabel(CRect(15, 40, 55, 70), -1, "KS:", kCenterText, 16);
view__7->addView(view__9);
HLine* const view__10 = createHLine(CRect(10, 36, 370, 41), -1, "", kCenterText, 14);
view__7->addView(view__10);
HLine* const view__11 = createHLine(CRect(10, 68, 370, 73), -1, "", kCenterText, 14);
view__7->addView(view__11);
Label* const view__12 = createLabel(CRect(80, 7, 310, 37), -1, "DefaultInstrument.sfz", kCenterText, 20);
sfzFileLabel_ = view__12;
view__7->addView(view__12);
Label* const view__13 = createLabel(CRect(80, 39, 310, 69), -1, "Key switch", kCenterText, 20);
view__7->addView(view__13);
Label* const view__14 = createLabel(CRect(10, 71, 70, 96), -1, "Voices:", kRightText, 12);
view__7->addView(view__14);
LoadFileButton* const view__15 = createLoadFileButton(CRect(315, 9, 340, 34), kTagLoadSfzFile, "", kCenterText, 24);
view__7->addView(view__15);
EditFileButton* const view__16 = createEditFileButton(CRect(340, 9, 365, 34), kTagEditSfzFile, "", kCenterText, 24);
view__7->addView(view__16);
Label* const view__17 = createLabel(CRect(75, 71, 125, 96), -1, "", kCenterText, 12);
infoVoicesLabel_ = view__17;
view__7->addView(view__17);
Label* const view__18 = createLabel(CRect(130, 71, 190, 96), -1, "Max:", kRightText, 12);
view__7->addView(view__18);
Label* const view__19 = createLabel(CRect(195, 71, 245, 96), -1, "", kCenterText, 12);
numVoicesLabel_ = view__19;
view__7->addView(view__19);
Label* const view__20 = createLabel(CRect(250, 71, 310, 96), -1, "Memory:", kRightText, 12);
view__7->addView(view__20);
Label* const view__21 = createLabel(CRect(315, 71, 365, 96), -1, "", kCenterText, 12);
memoryLabel_ = view__21;
view__7->addView(view__21);
RoundedGroup* const view__22 = createRoundedGroup(CRect(570, 5, 795, 105), -1, "", kCenterText, 14);
view__1->addView(view__22);
Knob48* const view__23 = createKnob48(CRect(45, 15, 93, 63), -1, "", kCenterText, 14);
view__22->addView(view__23);
view__23->setVisible(false);
ValueLabel* const view__24 = createValueLabel(CRect(40, 65, 100, 70), -1, "Center", kCenterText, 12);
view__22->addView(view__24);
view__24->setVisible(false);
ValueLabel* const view__25 = createValueLabel(CRect(10, 65, 70, 90), -1, "Center", kCenterText, 12);
view__23->addView(view__25);
view__25->setVisible(false);
Knob48* const view__26 = createKnob48(CRect(80, 15, 128, 63), kTagSetVolume, "", kCenterText, 14);
volumeSlider_ = view__26;
view__23->addView(view__26);
ValueLabel* const view__27 = createValueLabel(CRect(75, 65, 135, 90), -1, "0.0 dB", kCenterText, 12);
volumeLabel_ = view__27;
view__23->addView(view__27);
VMeter* const view__28 = createVMeter(CRect(145, 15, 180, 85), -1, "", kCenterText, 14);
view__23->addView(view__28);
Knob48* const view__25 = createKnob48(CRect(110, 15, 158, 63), kTagSetVolume, "", kCenterText, 14);
volumeSlider_ = view__25;
view__22->addView(view__25);
ValueLabel* const view__26 = createValueLabel(CRect(105, 65, 165, 87), -1, "0.0 dB", kCenterText, 12);
volumeLabel_ = view__26;
view__22->addView(view__26);
VMeter* const view__27 = createVMeter(CRect(175, 15, 210, 70), -1, "", kCenterText, 14);
view__22->addView(view__27);
enterTheme(defaultTheme);
LogicalGroup* const view__29 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14);
subPanels_[kPanelGeneral] = view__29;
view__0->addView(view__29);
view__29->setVisible(false);
RoundedGroup* const view__30 = createRoundedGroup(CRect(0, 0, 120, 285), -1, "", kCenterText, 14);
LogicalGroup* const view__28 = createLogicalGroup(CRect(5, 110, 796, 395), -1, "", kCenterText, 14);
subPanels_[kPanelGeneral] = view__28;
view__0->addView(view__28);
RoundedGroup* const view__29 = 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);
Label* const view__31 = createLabel(CRect(10, 10, 70, 35), -1, "Curves:", kLeftText, 12);
view__30->addView(view__31);
Label* const view__32 = createLabel(CRect(10, 35, 70, 60), -1, "Masters:", kLeftText, 12);
view__30->addView(view__32);
Label* const view__33 = createLabel(CRect(10, 60, 70, 85), -1, "Groups:", kLeftText, 12);
view__30->addView(view__33);
Label* const view__34 = createLabel(CRect(10, 85, 70, 110), -1, "Regions:", kLeftText, 12);
view__30->addView(view__34);
Label* const view__35 = createLabel(CRect(10, 110, 70, 135), -1, "Samples:", kLeftText, 12);
view__30->addView(view__35);
Label* const view__36 = createLabel(CRect(70, 10, 110, 35), -1, "0", kCenterText, 12);
infoCurvesLabel_ = view__36;
view__30->addView(view__36);
Label* const view__37 = createLabel(CRect(70, 35, 110, 60), -1, "0", kCenterText, 12);
infoMastersLabel_ = view__37;
view__30->addView(view__37);
Label* const view__38 = createLabel(CRect(70, 60, 110, 85), -1, "0", kCenterText, 12);
infoGroupsLabel_ = view__38;
view__30->addView(view__38);
Label* const view__39 = createLabel(CRect(70, 85, 110, 110), -1, "0", kCenterText, 12);
infoRegionsLabel_ = view__39;
view__30->addView(view__39);
Label* const view__40 = createLabel(CRect(70, 110, 110, 135), -1, "0", kCenterText, 12);
infoSamplesLabel_ = view__40;
view__30->addView(view__40);
LogicalGroup* const view__41 = createLogicalGroup(CRect(125, 0, 790, 280), -1, "", kCenterText, 14);
view__29->addView(view__41);
SfizzLargePicture* const view__42 = createSfizzLargePicture(CRect(130, 15, 530, 265), -1, "", kCenterText, 14);
Label* const view__31 = createLabel(CRect(15, 35, 75, 60), -1, "Masters:", kLeftText, 14);
view__29->addView(view__31);
Label* const view__32 = createLabel(CRect(15, 60, 75, 85), -1, "Groups:", kLeftText, 14);
view__29->addView(view__32);
Label* const view__33 = createLabel(CRect(15, 85, 75, 110), -1, "Regions:", kLeftText, 14);
view__29->addView(view__33);
Label* const view__34 = createLabel(CRect(15, 110, 75, 135), -1, "Samples:", kLeftText, 14);
view__29->addView(view__34);
Label* const view__35 = createLabel(CRect(115, 10, 155, 35), -1, "0", kCenterText, 14);
infoCurvesLabel_ = view__35;
view__29->addView(view__35);
Label* const view__36 = createLabel(CRect(115, 35, 155, 60), -1, "0", kCenterText, 14);
infoMastersLabel_ = view__36;
view__29->addView(view__36);
Label* const view__37 = createLabel(CRect(115, 60, 155, 85), -1, "0", kCenterText, 14);
infoGroupsLabel_ = view__37;
view__29->addView(view__37);
Label* const view__38 = createLabel(CRect(115, 85, 155, 110), -1, "0", kCenterText, 14);
infoRegionsLabel_ = view__38;
view__29->addView(view__38);
Label* const view__39 = createLabel(CRect(115, 110, 155, 135), -1, "0", kCenterText, 14);
infoSamplesLabel_ = view__39;
view__29->addView(view__39);
LogicalGroup* const view__40 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14);
subPanels_[kPanelControls] = view__40;
view__0->addView(view__40);
view__40->setVisible(false);
RoundedGroup* const view__41 = createRoundedGroup(CRect(0, 0, 790, 285), -1, "", kCenterText, 14);
view__40->addView(view__41);
Label* const view__42 = createLabel(CRect(0, 0, 790, 285), -1, "Controls not available", kCenterText, 40);
view__41->addView(view__42);
LogicalGroup* const view__43 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14);
subPanels_[kPanelControls] = view__43;
LogicalGroup* const view__43 = createLogicalGroup(CRect(5, 109, 795, 395), -1, "", kCenterText, 14);
subPanels_[kPanelSettings] = view__43;
view__0->addView(view__43);
view__43->setVisible(false);
RoundedGroup* const view__44 = createRoundedGroup(CRect(0, 0, 790, 285), -1, "", kCenterText, 14);
TitleGroup* const view__44 = createTitleGroup(CRect(255, 1, 535, 111), -1, "Engine", kCenterText, 12);
view__43->addView(view__44);
Label* const view__45 = createLabel(CRect(0, 0, 790, 285), -1, "Controls not available", kCenterText, 40);
ValueMenu* const view__45 = createValueMenu(CRect(25, 60, 85, 85), kTagSetNumVoices, "", kCenterText, 12);
numVoicesSlider_ = view__45;
view__44->addView(view__45);
LogicalGroup* const view__46 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14);
subPanels_[kPanelSettings] = view__46;
view__0->addView(view__46);
TitleGroup* const view__47 = createTitleGroup(CRect(255, 15, 535, 125), -1, "Engine", kCenterText, 12);
view__46->addView(view__47);
ValueMenu* const view__48 = createValueMenu(CRect(25, 60, 85, 85), kTagSetNumVoices, "", kCenterText, 12);
numVoicesSlider_ = view__48;
view__47->addView(view__48);
ValueLabel* const view__49 = createValueLabel(CRect(15, 20, 95, 45), -1, "Polyphony", kCenterText, 12);
view__47->addView(view__49);
ValueMenu* const view__50 = createValueMenu(CRect(110, 60, 170, 85), kTagSetOversampling, "", kCenterText, 12);
oversamplingSlider_ = view__50;
view__47->addView(view__50);
ValueLabel* const view__51 = createValueLabel(CRect(100, 20, 180, 45), -1, "Oversampling", kCenterText, 12);
view__47->addView(view__51);
ValueLabel* const view__52 = createValueLabel(CRect(185, 20, 265, 45), -1, "Preload size", kCenterText, 12);
view__47->addView(view__52);
ValueMenu* const view__53 = createValueMenu(CRect(195, 60, 255, 85), kTagSetPreloadSize, "", kCenterText, 12);
preloadSizeSlider_ = view__53;
view__47->addView(view__53);
TitleGroup* const view__54 = createTitleGroup(CRect(200, 150, 590, 270), -1, "Tuning", kCenterText, 12);
view__46->addView(view__54);
ValueLabel* const view__55 = createValueLabel(CRect(125, 20, 205, 45), -1, "Root key", kCenterText, 12);
view__54->addView(view__55);
ValueMenu* const view__56 = createValueMenu(CRect(220, 60, 280, 85), kTagSetTuningFrequency, "", kCenterText, 12);
tuningFrequencySlider_ = view__56;
view__54->addView(view__56);
ValueLabel* const view__57 = createValueLabel(CRect(210, 20, 290, 45), -1, "Frequency", kCenterText, 12);
view__54->addView(view__57);
Knob48* const view__58 = createKnob48(CRect(310, 45, 358, 93), kTagSetStretchedTuning, "", kCenterText, 14);
stretchedTuningSlider_ = view__58;
view__54->addView(view__58);
ValueLabel* const view__59 = createValueLabel(CRect(295, 20, 375, 45), -1, "Stretch", kCenterText, 12);
view__54->addView(view__59);
ValueLabel* const view__60 = createValueLabel(CRect(20, 20, 120, 45), -1, "Scala file", kCenterText, 12);
view__54->addView(view__60);
ValueButton* const view__61 = createValueButton(CRect(20, 60, 120, 85), kTagLoadScalaFile, "DefaultScale", kCenterText, 12);
scalaFileButton_ = view__61;
view__54->addView(view__61);
ValueMenu* const view__62 = createValueMenu(CRect(135, 60, 170, 85), kTagSetScalaRootKey, "", kCenterText, 12);
scalaRootKeySlider_ = view__62;
view__54->addView(view__62);
ValueMenu* const view__63 = createValueMenu(CRect(170, 60, 200, 85), kTagSetScalaRootKey, "", kCenterText, 12);
scalaRootOctaveSlider_ = view__63;
view__54->addView(view__63);
LogicalGroup* const view__64 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14);
subPanels_[kPanelInfo] = view__64;
view__0->addView(view__64);
view__64->setVisible(false);
RoundedGroup* const view__65 = createRoundedGroup(CRect(0, 0, 790, 285), -1, "", kCenterText, 14);
view__64->addView(view__65);
Label* const view__66 = createLabel(CRect(0, 0, 790, 285), -1, "Informative text goes here", kCenterText, 40);
view__65->addView(view__66);
Piano* const view__67 = createPiano(CRect(5, 400, 795, 470), -1, "", kCenterText, 14);
view__0->addView(view__67);
ValueLabel* const view__46 = createValueLabel(CRect(15, 20, 95, 45), -1, "Polyphony", kCenterText, 12);
view__44->addView(view__46);
ValueMenu* const view__47 = createValueMenu(CRect(110, 60, 170, 85), kTagSetOversampling, "", kCenterText, 12);
oversamplingSlider_ = view__47;
view__44->addView(view__47);
ValueLabel* const view__48 = createValueLabel(CRect(100, 20, 180, 45), -1, "Oversampling", kCenterText, 12);
view__44->addView(view__48);
ValueLabel* const view__49 = createValueLabel(CRect(185, 20, 265, 45), -1, "Preload size", kCenterText, 12);
view__44->addView(view__49);
ValueMenu* const view__50 = createValueMenu(CRect(195, 60, 255, 85), kTagSetPreloadSize, "", kCenterText, 12);
preloadSizeSlider_ = view__50;
view__44->addView(view__50);
TitleGroup* const view__51 = createTitleGroup(CRect(200, 159, 590, 279), -1, "Tuning", kCenterText, 12);
view__43->addView(view__51);
ValueLabel* const view__52 = createValueLabel(CRect(125, 20, 205, 45), -1, "Root key", kCenterText, 12);
view__51->addView(view__52);
ValueMenu* const view__53 = createValueMenu(CRect(220, 60, 280, 85), kTagSetTuningFrequency, "", kCenterText, 12);
tuningFrequencySlider_ = view__53;
view__51->addView(view__53);
ValueLabel* const view__54 = createValueLabel(CRect(210, 20, 290, 45), -1, "Frequency", kCenterText, 12);
view__51->addView(view__54);
Knob48* const view__55 = createKnob48(CRect(310, 45, 358, 93), kTagSetStretchedTuning, "", kCenterText, 14);
stretchedTuningSlider_ = view__55;
view__51->addView(view__55);
ValueLabel* const view__56 = createValueLabel(CRect(295, 20, 375, 45), -1, "Stretch", kCenterText, 12);
view__51->addView(view__56);
ValueLabel* const view__57 = createValueLabel(CRect(20, 20, 120, 45), -1, "Scala file", kCenterText, 12);
view__51->addView(view__57);
ValueButton* const view__58 = createValueButton(CRect(20, 60, 120, 85), kTagLoadScalaFile, "DefaultScale", kCenterText, 12);
scalaFileButton_ = view__58;
view__51->addView(view__58);
ValueMenu* const view__59 = createValueMenu(CRect(135, 60, 170, 85), kTagSetScalaRootKey, "", kCenterText, 12);
scalaRootKeySlider_ = view__59;
view__51->addView(view__59);
ValueMenu* const view__60 = createValueMenu(CRect(170, 60, 200, 85), kTagSetScalaRootKey, "", kCenterText, 12);
scalaRootOctaveSlider_ = view__60;
view__51->addView(view__60);
Piano* const view__61 = createPiano(CRect(5, 400, 795, 470), -1, "", kCenterText, 14);
view__0->addView(view__61);