diff --git a/plugins/editor/src/editor/EditIds.h b/plugins/editor/src/editor/EditIds.h index cb38ed65..5696e27d 100644 --- a/plugins/editor/src/editor/EditIds.h +++ b/plugins/editor/src/editor/EditIds.h @@ -22,11 +22,19 @@ enum class EditId : int { UserFilesDir, FallbackFilesDir, // - Key0, - KeyLast = Key0 + 128 - 1, + #define KEY_RANGE(Name) Name##0, Name##Last = Name##0 + 128 - 1 + #define CC_RANGE(Name) Name##0, Name##Last = Name##0 + sfz::config::numCCs - 1 // - Controller0, - ControllerLast = Controller0 + sfz::config::numCCs - 1, + KEY_RANGE(Key), + CC_RANGE(Controller), + // + KEY_RANGE(KeyUsed), + KEY_RANGE(KeyLabel), + KEY_RANGE(KeyswitchUsed), + KEY_RANGE(KeyswitchLabel), + CC_RANGE(ControllerUsed), + CC_RANGE(ControllerDefault), + CC_RANGE(ControllerLabel), // UINumCurves, UINumMasters, @@ -35,6 +43,9 @@ enum class EditId : int { UINumPreloadedSamples, UINumActiveVoices, UIActivePanel, + // + #undef KEY_RANGE + #undef CC_RANGE }; struct EditRange { @@ -66,5 +77,12 @@ struct EditRange { // defines editIdForCC, ccForEditId, editIdIsCC, etc.. DEFINE_EDIT_ID_RANGE_HELPERS(cc, CC, Controller) DEFINE_EDIT_ID_RANGE_HELPERS(key, Key, Key) +DEFINE_EDIT_ID_RANGE_HELPERS(keyUsed, KeyUsed, KeyUsed) +DEFINE_EDIT_ID_RANGE_HELPERS(keyLabel, KeyLabel, KeyLabel) +DEFINE_EDIT_ID_RANGE_HELPERS(keyswitchUsed, KeyswitchUsed, KeyswitchUsed) +DEFINE_EDIT_ID_RANGE_HELPERS(keyswitchLabel, KeyswitchLabel, KeyswitchLabel) +DEFINE_EDIT_ID_RANGE_HELPERS(ccUsed, CCUsed, ControllerUsed) +DEFINE_EDIT_ID_RANGE_HELPERS(ccDefault, CCDefault, ControllerDefault) +DEFINE_EDIT_ID_RANGE_HELPERS(ccLabel, CCLabel, ControllerLabel) #undef DEFINE_EDIT_ID_RANGE_HELPERS diff --git a/plugins/lv2/sfizz_ui.cpp b/plugins/lv2/sfizz_ui.cpp index 8a061ea7..68c846b7 100644 --- a/plugins/lv2/sfizz_ui.cpp +++ b/plugins/lv2/sfizz_ui.cpp @@ -371,11 +371,33 @@ port_event(LV2UI_Handle ui, } static void -sfizz_ui_update_description(const InstrumentDescription& desc) +sfizz_ui_update_description(sfizz_ui_t *self, const InstrumentDescription& desc) { - // TODO(jpc) perform editor updates here + self->uiReceiveValue(EditId::UINumCurves, desc.numCurves); + self->uiReceiveValue(EditId::UINumMasters, desc.numMasters); + self->uiReceiveValue(EditId::UINumGroups, desc.numGroups); + self->uiReceiveValue(EditId::UINumRegions, desc.numRegions); + self->uiReceiveValue(EditId::UINumPreloadedSamples, desc.numSamples); - //std::cerr << desc << std::endl; + for (unsigned key = 0; key < 128; ++key) { + bool keyUsed = desc.keyUsed.test(key); + bool keyswitchUsed = desc.keyswitchUsed.test(key); + self->uiReceiveValue(editIdForKeyUsed(key), float(keyUsed)); + self->uiReceiveValue(editIdForKeyswitchUsed(key), float(keyswitchUsed)); + if (keyUsed) + self->uiReceiveValue(editIdForKeyLabel(key), desc.keyLabel[key]); + if (keyswitchUsed) + self->uiReceiveValue(editIdForKeyswitchLabel(key), desc.keyswitchLabel[key]); + } + + for (unsigned cc = 0; cc < sfz::config::numCCs; ++cc) { + bool ccUsed = desc.ccUsed.test(cc); + self->uiReceiveValue(editIdForCCUsed(cc), float(ccUsed)); + if (ccUsed) { + self->uiReceiveValue(editIdForCCDefault(cc), desc.ccDefault[cc]); + self->uiReceiveValue(editIdForCCLabel(cc), desc.ccLabel[cc]); + } + } } static void @@ -396,7 +418,7 @@ sfizz_ui_check_sfz_update(sfizz_ui_t *self) const InstrumentDescription desc = parseDescriptionBlob( absl::string_view(reinterpret_cast(data), size)); - sfizz_ui_update_description(desc); + sfizz_ui_update_description(self, desc); } } diff --git a/plugins/vst/SfizzVstEditor.cpp b/plugins/vst/SfizzVstEditor.cpp index dea3d3e6..19472000 100644 --- a/plugins/vst/SfizzVstEditor.cpp +++ b/plugins/vst/SfizzVstEditor.cpp @@ -196,7 +196,32 @@ void PLUGIN_API SfizzVstEditor::update(FUnknown* changedUnknown, int32 message) if (SfzDescriptionUpdate* update = FCast(changedUnknown)) { const InstrumentDescription desc = parseDescriptionBlob(update->getDescription()); - // TODO(jpc) instrument description + + uiReceiveValue(EditId::UINumCurves, desc.numCurves); + uiReceiveValue(EditId::UINumMasters, desc.numMasters); + uiReceiveValue(EditId::UINumGroups, desc.numGroups); + uiReceiveValue(EditId::UINumRegions, desc.numRegions); + uiReceiveValue(EditId::UINumPreloadedSamples, desc.numSamples); + + for (unsigned key = 0; key < 128; ++key) { + bool keyUsed = desc.keyUsed.test(key); + bool keyswitchUsed = desc.keyswitchUsed.test(key); + uiReceiveValue(editIdForKeyUsed(key), float(keyUsed)); + uiReceiveValue(editIdForKeyswitchUsed(key), float(keyswitchUsed)); + if (keyUsed) + uiReceiveValue(editIdForKeyLabel(key), desc.keyLabel[key]); + if (keyswitchUsed) + uiReceiveValue(editIdForKeyswitchLabel(key), desc.keyswitchLabel[key]); + } + + for (unsigned cc = 0; cc < sfz::config::numCCs; ++cc) { + bool ccUsed = desc.ccUsed.test(cc); + uiReceiveValue(editIdForCCUsed(cc), float(ccUsed)); + if (ccUsed) { + uiReceiveValue(editIdForCCDefault(cc), desc.ccDefault[cc]); + uiReceiveValue(editIdForCCLabel(cc), desc.ccLabel[cc]); + } + } } if (ScalaUpdate* update = FCast(changedUnknown)) {