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
+28 -2
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 {
@@ -770,7 +776,20 @@ 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)
+22 -23
View File
@@ -114,7 +114,7 @@ const PluginPresetSelector =
hasPresets(pedalboardItem: PedalboardItem | null): boolean {
if (pedalboardItem === null) return false;
if (!pedalboardItem.uri) return false;
if (pedalboardItem.isStart() || pedalboardItem.isEnd()
if (pedalboardItem.isStart() || pedalboardItem.isEnd()
|| pedalboardItem.isEmpty() || pedalboardItem.isSplit()) {
return false;
}
@@ -123,8 +123,8 @@ const PluginPresetSelector =
isVisible(pedalboardItem: PedalboardItem | null): boolean {
if (pedalboardItem === null) return false;
if (!pedalboardItem.uri) return false;
if (pedalboardItem.isStart() || pedalboardItem.isEnd()
|| pedalboardItem.isSplit()) {
if (pedalboardItem.isStart() || pedalboardItem.isEnd()
) {
return false;
}
return true;
@@ -197,7 +197,7 @@ const PluginPresetSelector =
loadPresets(): void {
if (this.props.pedalboardItem === null) return;
if (!this.hasPresets(this.props.pedalboardItem)) return;
if (!this.hasPresets(this.props.pedalboardItem)) return;
let captureUri: string = this.props.pedalboardItem.uri;
this.model.getPluginPresets(captureUri)
.then((presets: PluginUiPresets) => {
@@ -235,20 +235,18 @@ const PluginPresetSelector =
currentPedalboard?: PedalboardItem;
componentDidUpdate(
prevProps: Readonly<PluginPresetSelectorProps>,
prevState: Readonly<PluginPresetSelectorState>,
snapshot?: any): void
{
prevProps: Readonly<PluginPresetSelectorProps>,
prevState: Readonly<PluginPresetSelectorState>,
snapshot?: any): void {
if (this.props.pedalboardItem !== prevProps.pedalboardItem) {
this.setState({
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();
@@ -340,7 +339,7 @@ const PluginPresetSelector =
}
buildMenuItems() {
let result : React.ReactNode[] = [];
let result: React.ReactNode[] = [];
if (this.state.hasPresets) {
result.push((<MenuItem key="menuSaveAs" onClick={(e) => this.handlePluginPresetsMenuSaveAs(e)}>Save plugin preset...</MenuItem>));
result.push((<MenuItem key="menuEdit" onClick={(e) => this.handleMenuEditPluginPresets()}>Manage plugin presets...</MenuItem>));
@@ -355,7 +354,7 @@ const PluginPresetSelector =
<PluginPresetIcon className={this.props.classes?.pluginMenuIcon ?? ""} />
{preset.label}</MenuItem>
));
));
hasPresets = true;
}
if (hasPresets) {
@@ -402,12 +401,12 @@ const PluginPresetSelector =
}
</Menu>
{this.state.hasPresets && this.state.showPresetsDialog && (
<PluginPresetsDialog
instanceId={this.props.instanceId}
presets={this.state.presets}
show={this.state.showPresetsDialog}
isEditDialog={this.state.showEditPresetsDialog}
onDialogClose={() => this.handleDialogClose()} />
<PluginPresetsDialog
instanceId={this.props.instanceId}
presets={this.state.presets}
show={this.state.showPresetsDialog}
isEditDialog={this.state.showEditPresetsDialog}
onDialogClose={() => this.handleDialogClose()} />
)}
<RenameDialog open={this.state.renameDialogOpen}
title="Rename"