MCPcopy Create free account
hub / github.com/CoderLine/alphaTab / TrackItem

Class TrackItem

packages/playground/src/components/TrackItem.ts:88–180  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

86);
87
88export class TrackItem implements Mountable {
89 readonly root: HTMLElement;
90 readonly track: alphaTab.model.Track;
91
92 private muteBtn: ToggleButton;
93 private soloBtn: ToggleButton;
94 private volume: Slider;
95
96 onSelect: ((e: MouseEvent) => void) | null = null;
97
98 constructor(api: alphaTab.AlphaTabApi, track: alphaTab.model.Track) {
99 this.track = track;
100 this.root = parseHtml(html`
101 <div class="at-track">
102 <div class="at-track-icon"></div>
103 <span class="at-track-name">${track.name}</span>
104 <div class="at-track-controls">
105 <div class="cmp-mute"></div>
106 <div class="cmp-solo"></div>
107 <span class="at-track-volume-icon"></span>
108 <div class="cmp-volume"></div>
109 </div>
110 </div>
111 `);
112 this.root.querySelector('.at-track-icon')!.appendChild(renderIcon(pickTrackIcon(track)));
113 this.root.querySelector('.at-track-volume-icon')!.appendChild(renderIcon(Icons.Volume));
114
115 this.muteBtn = mount(
116 this.root,
117 '.cmp-mute',
118 new ToggleButton({ icon: Icons.Track, label: 'Mute', tooltip: 'Mute track' })
119 );
120 // Replace the IconButton svg with simple text button by clearing the icon slot
121 const muteIconSlot = this.muteBtn.root.querySelector('.at-icon-btn-icon');
122 if (muteIconSlot) {
123 muteIconSlot.remove();
124 }
125 this.muteBtn.root.classList.remove('at-icon-btn');
126 this.muteBtn.root.classList.add('at-track-mute');
127 this.muteBtn.onChange = active => {
128 api.changeTrackMute([this.track], active);
129 };
130
131 this.soloBtn = mount(
132 this.root,
133 '.cmp-solo',
134 new ToggleButton({ icon: Icons.Track, label: 'Solo', tooltip: 'Solo track' })
135 );
136 const soloIconSlot = this.soloBtn.root.querySelector('.at-icon-btn-icon');
137 if (soloIconSlot) {
138 soloIconSlot.remove();
139 }
140 this.soloBtn.root.classList.remove('at-icon-btn');
141 this.soloBtn.root.classList.add('at-track-solo');
142 this.soloBtn.onChange = active => {
143 api.changeTrackSolo([this.track], active);
144 };
145

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected