From 092b95fc3c6785b460c5d6c1d6ba9869563f5abe Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Thu, 5 Mar 2020 16:41:59 +0100 Subject: [PATCH] Update VST UI --- vst/SfizzVstEditor.cpp | 145 ++++++++++++++++++++++------------------- vst/SfizzVstEditor.h | 13 ++++ 2 files changed, 91 insertions(+), 67 deletions(-) diff --git a/vst/SfizzVstEditor.cpp b/vst/SfizzVstEditor.cpp index adad6f6d..4d5820d1 100644 --- a/vst/SfizzVstEditor.cpp +++ b/vst/SfizzVstEditor.cpp @@ -67,6 +67,11 @@ void SfizzVstEditor::valueChanged(CControl* ctl) Call::later([this]() { chooseSfzFile(); }); break; + + default: + if (tag >= kTagFirstChangePanel && tag <= kTagLastChangePanel) + setActivePanel(tag - kTagFirstChangePanel); + break; } } @@ -111,48 +116,6 @@ void SfizzVstEditor::loadSfzFile(const std::string& filePath) _fileLabel->setText(("File: " + filePath).c_str()); } -/// -class SimpleButton : public CControl { -public: - explicit SimpleButton(const CRect& size, IControlListener* listener = nullptr, int32_t tag = -1, UTF8StringPtr title = nullptr) - : CControl(size, listener, tag), _title(title ? title : "") { - } - - void draw(CDrawContext *dc) override - { - CRect bounds = getViewSize(); - dc->setFrameColor(CColor(0xff, 0xff, 0xff)); - dc->drawRect(bounds, kDrawStroked); - dc->drawString(_title.c_str(), bounds); - } - - CMouseEventResult onMouseDown(CPoint& where, const CButtonState& buttons) override - { - if (!buttons.isLeftButton()) - return kMouseEventNotHandled; - - value = getMin(); - if (isDirty()) { - valueChanged(); - invalid(); - } - value = getMax(); - if (isDirty()) - { - valueChanged(); - invalid(); - } - - return kMouseEventHandled; - } - - CLASS_METHODS(SimpleButton, CControl) - -private: - std::string _title; -}; - -/// void SfizzVstEditor::createFrameContents() { CFrame* frame = this->frame; @@ -160,41 +123,80 @@ void SfizzVstEditor::createFrameContents() frame->setBackgroundColor(CColor(0xff, 0xff, 0xff)); - CKickButton* sfizzButton = new CKickButton(bounds, this, kTagLoadSfzFile, &_logo); - frame->addView(sfizzButton); - CRect bottomRow = bounds; bottomRow.top = bottomRow.bottom - 30; CRect topRow = bounds; topRow.bottom = topRow.top + 30; - CTextLabel* descLabel = new CTextLabel( - bottomRow, "Paul Ferrand and the SFZ Tools work group"); - descLabel->setFontColor(CColor(0x00, 0x00, 0x00)); - descLabel->setBackColor(CColor(0x00, 0x00, 0x00, 0x00)); - frame->addView(descLabel); + CViewContainer* panel; + _activePanel = kPanelGeneral; - CRect fileBox = topRow; - fileBox.right = fileBox.left + 400; - CTextLabel* fileLabel = new CTextLabel(fileBox, "No file loaded"); - fileLabel->setFontColor(CColor(0x00, 0x00, 0x00)); - fileLabel->setBackColor(CColor(0x00, 0x00, 0x00, 0x00)); - // fileLabel->setHoriAlign(kLeftText); - frame->addView(fileLabel); - _fileLabel = fileLabel; + CRect topLeftLabelBox = topRow; + topLeftLabelBox.right -= 20 * kNumPanels; - // CTextLabel *label; - // CRect rect; - // CRect rect2; + // general panel + { + panel = new CViewContainer(bounds); + frame->addView(panel); + panel->setTransparency(true); - // rect = CRect(10.0, 10.0, 120.0, 30.0); - // frame->addView(new SimpleButton(rect, this, kTagLoadSfzFile, "Load SFZ file")); + CKickButton* sfizzButton = new CKickButton(bounds, this, kTagLoadSfzFile, &_logo); + panel->addView(sfizzButton); - // rect2 = CRect(150.0, 10.0, bounds.right - 10.0, 30.0); - // frame->addView((label = new CTextLabel(rect2, "no file"))); - // label->setHoriAlign(kLeftText); - // _fileLabel = label; + CTextLabel* topLeftLabel = new CTextLabel(topLeftLabelBox, "No file loaded"); + topLeftLabel->setFontColor(CColor(0x00, 0x00, 0x00)); + topLeftLabel->setBackColor(CColor(0x00, 0x00, 0x00, 0x00)); + panel->addView(topLeftLabel); + _fileLabel = topLeftLabel; + + _subPanels[kPanelGeneral] = panel; + } + + // settings panel + { + panel = new CViewContainer(bounds); + frame->addView(panel); + panel->setTransparency(true); + + CTextLabel* topLeftLabel = new CTextLabel(topLeftLabelBox, "Settings"); + topLeftLabel->setFontColor(CColor(0x00, 0x00, 0x00)); + topLeftLabel->setBackColor(CColor(0x00, 0x00, 0x00, 0x00)); + panel->addView(topLeftLabel); + + _subPanels[kPanelSettings] = panel; + } + + // all panels + for (unsigned currentPanel = 0; currentPanel < kNumPanels; ++currentPanel) { + panel = _subPanels[currentPanel]; + + CTextLabel* descLabel = new CTextLabel( + bottomRow, "Paul Ferrand and the SFZ Tools work group"); + descLabel->setFontColor(CColor(0x00, 0x00, 0x00)); + descLabel->setBackColor(CColor(0x00, 0x00, 0x00, 0x00)); + panel->addView(descLabel); + + for (unsigned i = 0; i < kNumPanels; ++i) { + CRect btnRect = topRow; + btnRect.left = topRow.right - (kNumPanels - i) * 20; + btnRect.right = btnRect.left + 20; + + const char *text; + switch (i) { + case kPanelGeneral: text = "G"; break; + case kPanelSettings: text = "S"; break; + default: text = "?"; break; + } + + CTextButton* changePanelButton = new CTextButton(btnRect, this, kTagFirstChangePanel + i, text); + panel->addView(changePanelButton); + + changePanelButton->setRoundRadius(0.0); + } + + panel->setVisible(currentPanel == _activePanel); + } } void SfizzVstEditor::updateStateDisplay() @@ -207,3 +209,12 @@ void SfizzVstEditor::updateStateDisplay() if (_fileLabel) _fileLabel->setText(("File: " + state.sfzFile).c_str()); } + +void SfizzVstEditor::setActivePanel(unsigned panelId) +{ + if (_activePanel != panelId) { + _subPanels[_activePanel]->setVisible(false); + _subPanels[panelId]->setVisible(true); + _activePanel = panelId; + } +} diff --git a/vst/SfizzVstEditor.h b/vst/SfizzVstEditor.h index 44839788..b293be5c 100644 --- a/vst/SfizzVstEditor.h +++ b/vst/SfizzVstEditor.h @@ -31,9 +31,22 @@ private: void createFrameContents(); void updateStateDisplay(); + void setActivePanel(unsigned panelId); + + enum { + kPanelGeneral, + // kPanelControls, + kPanelSettings, + kNumPanels, + }; + + unsigned _activePanel = 0; + CViewContainer* _subPanels[kNumPanels] = {}; enum { kTagLoadSfzFile, + kTagFirstChangePanel, + kTagLastChangePanel = kTagFirstChangePanel + kNumPanels - 1, }; CBitmap _logo;