smoosic
Version:
<sub>[Github site](https://github.com/Smoosic/smoosic) | [source documentation](https://smoosic.github.io/Smoosic/release/docs/modules.html) | [change notes](https://aarondavidnewman.github.io/Smoosic/changes.html) | [application](https://smoosic.github.i
128 lines (127 loc) • 4.27 kB
text/typescript
import { DialogDefinition, SuiDialogParams } from './dialog';
import { SmoDynamicText, SmoLyric } from '../../smo/data/noteModifiers';
import { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';
import { SmoSelection } from '../../smo/xform/selections';
import { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';
import { PromiseHelpers } from '../../common/promiseHelpers';
/**
* Edit or remove dynamice, a SmoNote attribute adapter
* @category SuiDialog
*/
export class SuiDynamicDialogAdapter extends SuiComponentAdapter {
modifier: SmoDynamicText;
backup: SmoDynamicText;
selection: SmoSelection;
constructor(view: SuiScoreViewOperations, modifier: SmoDynamicText) {
super(view);
this.modifier = modifier;
this.backup = new SmoDynamicText(this.modifier);
if (this.view.tracker.modifierSelections.length) {
this.selection = this.view.tracker.modifierSelections[0].selection!;
} else {
this.selection = this.view.tracker.selections[0];
}
}
async cancel() {
await this.view.addDynamic(this.selection, this.backup);
}
async commit() {
return PromiseHelpers.emptyPromise();
}
get xOffset() {
return this.modifier.xOffset;
}
async remove() {
await this.view.removeDynamic(this.modifier);
}
set xOffset(value: number) {
this.modifier.xOffset = value;
this.view.addDynamic(this.selection, this.modifier);
}
get fontSize() {
return this.modifier.fontSize;
}
set fontSize(value: number) {
this.modifier.fontSize = value;
this.view.addDynamic(this.selection, this.modifier);
}
get yOffsetLine() {
return this.modifier.yOffsetLine;
}
set yOffsetLine(value: number) {
this.modifier.yOffsetLine = value;
this.view.addDynamic(this.selection, this.modifier);
}
get yOffsetPixels() {
return this.modifier.yOffsetPixels;
}
set yOffsetPixels(value: number) {
this.modifier.yOffsetPixels = value;
this.view.addDynamic(this.selection, this.modifier);
}
get text() {
return this.modifier.text;
}
set text(value: string) {
this.modifier.text = value;
this.view.addDynamic(this.selection, this.modifier);
}
}
/**
* @category SuiDialog
*/
export class SuiDynamicModifierDialog extends SuiDialogAdapterBase<SuiDynamicDialogAdapter> {
static dialogElements: DialogDefinition = {
label: 'Dynamics Properties', elements:
[{
smoName: 'yOffsetLine',
defaultValue: 11,
control: 'SuiRockerComponent',
label: 'Y Line'
}, {
smoName: 'yOffsetPixels',
defaultValue: 0,
control: 'SuiRockerComponent',
label: 'Y Offset Px'
}, {
smoName: 'xOffset',
defaultValue: 0,
control: 'SuiRockerComponent',
label: 'X Offset'
}, {
smoName: 'text',
defaultValue: SmoDynamicText.dynamics.P,
options: [{
value: SmoDynamicText.dynamics.P,
label: 'Piano'
}, {
value: SmoDynamicText.dynamics.PP,
label: 'Pianissimo'
}, {
value: SmoDynamicText.dynamics.MP,
label: 'Mezzo-Piano'
}, {
value: SmoDynamicText.dynamics.MF,
label: 'Mezzo-Forte'
}, {
value: SmoDynamicText.dynamics.F,
label: 'Forte'
}, {
value: SmoDynamicText.dynamics.FF,
label: 'Fortissimo'
}, {
value: SmoDynamicText.dynamics.SFZ,
label: 'Sforzando'
}],
control: 'SuiDropdownComponent',
label: 'Text'
}],
staticText: []
};
constructor(parameters: SuiDialogParams) {
const adapter = new SuiDynamicDialogAdapter(parameters.view, parameters.modifier);
super(SuiDynamicModifierDialog.dialogElements, { adapter, ...parameters });
this.view.groupUndo(true);
this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];
}
}