Copy/Paste for splits effects.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
@@ -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>));
|
||||
|
||||
Reference in New Issue
Block a user