Copy/Paste for splits effects.

This commit is contained in:
Robin E.R. Davies
2026-06-16 03:39:50 -04:00
parent 0bd7cea73c
commit 57ce06cecd
2 changed files with 50 additions and 25 deletions
+27 -1
View File
@@ -59,7 +59,13 @@ export class ControlValue implements Deserializable<ControlValue> {
}
export class PedalboardItem implements Deserializable<PedalboardItem> {
clone() {
clone(): PedalboardItem {
if (this.isSplit())
{
let result = new PedalboardSplitItem();
result.deserialize(this);
return result as PedalboardItem;;
}
return new PedalboardItem().deserialize(this);
}
deserializePedalboardItem(input: any): PedalboardItem {
@@ -771,6 +777,19 @@ export class Pedalboard implements Deserializable<Pedalboard> {
return false;
}
assignNewInstanceIds(items: PedalboardItem[])
{
for (let i = 0; i < items.length; ++i)
{
items[i].instanceId = ++this.nextInstanceId;
if (items[i].isSplit())
{
let splitItem = items[i] as PedalboardSplitItem;
this.assignNewInstanceIds(splitItem.topChain);
this.assignNewInstanceIds(splitItem.bottomChain);
}
}
}
replaceItem(instanceId: number, newItem: PedalboardItem)
{
newItem.instanceId = ++this.nextInstanceId;
@@ -780,6 +799,13 @@ export class Pedalboard implements Deserializable<Pedalboard> {
{
throw new PiPedalArgumentError("instanceId not found.");
}
if (newItem.isSplit())
{
// Generate new instance ids for all children, to avoid conflicts.
let splitItem = newItem as PedalboardSplitItem;
this.assignNewInstanceIds(splitItem.topChain);
this.assignNewInstanceIds(splitItem.bottomChain);
}
return newItem.instanceId;
}
private _addItem(items: PedalboardItem[], newItem: PedalboardItem, instanceId: number, append: boolean)
+8 -9
View File
@@ -124,7 +124,7 @@ const PluginPresetSelector =
if (pedalboardItem === null) return false;
if (!pedalboardItem.uri) return false;
if (pedalboardItem.isStart() || pedalboardItem.isEnd()
|| pedalboardItem.isSplit()) {
) {
return false;
}
return true;
@@ -237,18 +237,16 @@ const PluginPresetSelector =
componentDidUpdate(
prevProps: Readonly<PluginPresetSelectorProps>,
prevState: Readonly<PluginPresetSelectorState>,
snapshot?: any): void
{
snapshot?: any): void {
if (this.props.pedalboardItem !== prevProps.pedalboardItem) {
this.setState({
isVisible: this.isVisible(this.props.pedalboardItem),
hasPresets: this.hasPresets(this.props.pedalboardItem) });
hasPresets: this.hasPresets(this.props.pedalboardItem)
});
if (this.props.pedalboardItem) {
if (this.props.pedalboardItem.isEmpty())
{
if (this.props.pedalboardItem.isEmpty()) {
this.setState({ presets: new PluginUiPresets() });
} else
{
} else {
this.loadPresets();
}
}
@@ -272,7 +270,8 @@ const PluginPresetSelector =
}
isMenuCopyPluginEnabled(): boolean {
return this.state.hasPresets;
if (this.props.pedalboardItem === null) return false;
return !this.props.pedalboardItem.isEmpty();
}
handleMenuCopyPlugin(): void {
this.handlePresetsMenuClose();