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> {
|
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);
|
return new PedalboardItem().deserialize(this);
|
||||||
}
|
}
|
||||||
deserializePedalboardItem(input: any): PedalboardItem {
|
deserializePedalboardItem(input: any): PedalboardItem {
|
||||||
@@ -771,6 +777,19 @@ export class Pedalboard implements Deserializable<Pedalboard> {
|
|||||||
return false;
|
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)
|
replaceItem(instanceId: number, newItem: PedalboardItem)
|
||||||
{
|
{
|
||||||
newItem.instanceId = ++this.nextInstanceId;
|
newItem.instanceId = ++this.nextInstanceId;
|
||||||
@@ -780,6 +799,13 @@ export class Pedalboard implements Deserializable<Pedalboard> {
|
|||||||
{
|
{
|
||||||
throw new PiPedalArgumentError("instanceId not found.");
|
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;
|
return newItem.instanceId;
|
||||||
}
|
}
|
||||||
private _addItem(items: PedalboardItem[], newItem: PedalboardItem, instanceId: number, append: boolean)
|
private _addItem(items: PedalboardItem[], newItem: PedalboardItem, instanceId: number, append: boolean)
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ const PluginPresetSelector =
|
|||||||
if (pedalboardItem === null) return false;
|
if (pedalboardItem === null) return false;
|
||||||
if (!pedalboardItem.uri) return false;
|
if (!pedalboardItem.uri) return false;
|
||||||
if (pedalboardItem.isStart() || pedalboardItem.isEnd()
|
if (pedalboardItem.isStart() || pedalboardItem.isEnd()
|
||||||
|| pedalboardItem.isSplit()) {
|
) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -237,18 +237,16 @@ const PluginPresetSelector =
|
|||||||
componentDidUpdate(
|
componentDidUpdate(
|
||||||
prevProps: Readonly<PluginPresetSelectorProps>,
|
prevProps: Readonly<PluginPresetSelectorProps>,
|
||||||
prevState: Readonly<PluginPresetSelectorState>,
|
prevState: Readonly<PluginPresetSelectorState>,
|
||||||
snapshot?: any): void
|
snapshot?: any): void {
|
||||||
{
|
|
||||||
if (this.props.pedalboardItem !== prevProps.pedalboardItem) {
|
if (this.props.pedalboardItem !== prevProps.pedalboardItem) {
|
||||||
this.setState({
|
this.setState({
|
||||||
isVisible: this.isVisible(this.props.pedalboardItem),
|
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) {
|
||||||
if (this.props.pedalboardItem.isEmpty())
|
if (this.props.pedalboardItem.isEmpty()) {
|
||||||
{
|
|
||||||
this.setState({ presets: new PluginUiPresets() });
|
this.setState({ presets: new PluginUiPresets() });
|
||||||
} else
|
} else {
|
||||||
{
|
|
||||||
this.loadPresets();
|
this.loadPresets();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -272,7 +270,8 @@ const PluginPresetSelector =
|
|||||||
}
|
}
|
||||||
|
|
||||||
isMenuCopyPluginEnabled(): boolean {
|
isMenuCopyPluginEnabled(): boolean {
|
||||||
return this.state.hasPresets;
|
if (this.props.pedalboardItem === null) return false;
|
||||||
|
return !this.props.pedalboardItem.isEmpty();
|
||||||
}
|
}
|
||||||
handleMenuCopyPlugin(): void {
|
handleMenuCopyPlugin(): void {
|
||||||
this.handlePresetsMenuClose();
|
this.handlePresetsMenuClose();
|
||||||
@@ -340,7 +339,7 @@ const PluginPresetSelector =
|
|||||||
}
|
}
|
||||||
|
|
||||||
buildMenuItems() {
|
buildMenuItems() {
|
||||||
let result : React.ReactNode[] = [];
|
let result: React.ReactNode[] = [];
|
||||||
if (this.state.hasPresets) {
|
if (this.state.hasPresets) {
|
||||||
result.push((<MenuItem key="menuSaveAs" onClick={(e) => this.handlePluginPresetsMenuSaveAs(e)}>Save plugin preset...</MenuItem>));
|
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>));
|
result.push((<MenuItem key="menuEdit" onClick={(e) => this.handleMenuEditPluginPresets()}>Manage plugin presets...</MenuItem>));
|
||||||
|
|||||||
Reference in New Issue
Block a user