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 {
|
||||||
@@ -770,7 +776,20 @@ 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)
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ const PluginPresetSelector =
|
|||||||
hasPresets(pedalboardItem: PedalboardItem | null): boolean {
|
hasPresets(pedalboardItem: PedalboardItem | null): boolean {
|
||||||
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.isEmpty() || pedalboardItem.isSplit()) {
|
|| pedalboardItem.isEmpty() || pedalboardItem.isSplit()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -123,8 +123,8 @@ const PluginPresetSelector =
|
|||||||
isVisible(pedalboardItem: PedalboardItem | null): boolean {
|
isVisible(pedalboardItem: PedalboardItem | null): boolean {
|
||||||
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;
|
||||||
@@ -197,7 +197,7 @@ const PluginPresetSelector =
|
|||||||
|
|
||||||
loadPresets(): void {
|
loadPresets(): void {
|
||||||
if (this.props.pedalboardItem === null) return;
|
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;
|
let captureUri: string = this.props.pedalboardItem.uri;
|
||||||
this.model.getPluginPresets(captureUri)
|
this.model.getPluginPresets(captureUri)
|
||||||
.then((presets: PluginUiPresets) => {
|
.then((presets: PluginUiPresets) => {
|
||||||
@@ -235,20 +235,18 @@ const PluginPresetSelector =
|
|||||||
|
|
||||||
currentPedalboard?: PedalboardItem;
|
currentPedalboard?: PedalboardItem;
|
||||||
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>));
|
||||||
@@ -355,7 +354,7 @@ const PluginPresetSelector =
|
|||||||
<PluginPresetIcon className={this.props.classes?.pluginMenuIcon ?? ""} />
|
<PluginPresetIcon className={this.props.classes?.pluginMenuIcon ?? ""} />
|
||||||
|
|
||||||
{preset.label}</MenuItem>
|
{preset.label}</MenuItem>
|
||||||
));
|
));
|
||||||
hasPresets = true;
|
hasPresets = true;
|
||||||
}
|
}
|
||||||
if (hasPresets) {
|
if (hasPresets) {
|
||||||
@@ -402,12 +401,12 @@ const PluginPresetSelector =
|
|||||||
}
|
}
|
||||||
</Menu>
|
</Menu>
|
||||||
{this.state.hasPresets && this.state.showPresetsDialog && (
|
{this.state.hasPresets && this.state.showPresetsDialog && (
|
||||||
<PluginPresetsDialog
|
<PluginPresetsDialog
|
||||||
instanceId={this.props.instanceId}
|
instanceId={this.props.instanceId}
|
||||||
presets={this.state.presets}
|
presets={this.state.presets}
|
||||||
show={this.state.showPresetsDialog}
|
show={this.state.showPresetsDialog}
|
||||||
isEditDialog={this.state.showEditPresetsDialog}
|
isEditDialog={this.state.showEditPresetsDialog}
|
||||||
onDialogClose={() => this.handleDialogClose()} />
|
onDialogClose={() => this.handleDialogClose()} />
|
||||||
)}
|
)}
|
||||||
<RenameDialog open={this.state.renameDialogOpen}
|
<RenameDialog open={this.state.renameDialogOpen}
|
||||||
title="Rename"
|
title="Rename"
|
||||||
|
|||||||
Reference in New Issue
Block a user