소스 검색

feat(Play/Pause): Button automatically resets to Play symbol when playback ends (#92)

sschmidTU 2 년 전
부모
커밋
f334ddfa2d
3개의 변경된 파일36개의 추가작업 그리고 1개의 파일을 삭제
  1. 1 0
      demo/index.js
  2. 24 1
      src/Playback/UIComponents/ControlPanel/ControlPanel.ts
  3. 11 0
      src/Playback/UIComponents/ControlPanel/PlayPauseButton.ts

+ 1 - 0
demo/index.js

@@ -970,6 +970,7 @@ import { TransposeCalculator } from '../src/Plugins/Transpose/TransposeCalculato
             playbackManager.initialize(osmd.Sheet.musicPartManager);
             //playbackManager.removeListener(osmd.cursor); // only necessary if no duplicate checks in addListener
             playbackManager.addListener(osmd.cursor);
+            playbackManager.addListener(playbackControlPanel);
             playbackManager.reset();
             osmd.PlaybackManager = playbackManager;
             playbackControlPanel.clearVolumeTracks();

+ 24 - 1
src/Playback/UIComponents/ControlPanel/ControlPanel.ts

@@ -9,8 +9,12 @@ import { MDCTabBar } from "@material/tab-bar";
 import {MDCRipple} from "@material/ripple";
 import {MDCIconButtonToggle} from "@material/icon-button";
 import { Dictionary } from "typescript-collections";
+import { CursorPosChangedData } from "../../../Common/DataObjects/CursorPosChangedData";
+import { Fraction } from "../../../Common/DataObjects/Fraction";
+import { IPlaybackListener } from "../../../Common/Interfaces/IPlaybackListener";
 
-export class ControlPanel extends AUIController<IPlaybackParametersListener> implements IPlaybackParametersListener {
+export class ControlPanel extends AUIController<IPlaybackParametersListener>
+implements IPlaybackParametersListener, IPlaybackListener {
     //TODO: We need this to be updated if the score changes these parameters as well
     public volumeMute(instrument: number): void {
         throw new Error("Method not implemented.");
@@ -214,6 +218,25 @@ export class ControlPanel extends AUIController<IPlaybackParametersListener> imp
                 }
             });
         }
+    }
+
+    public cursorPositionChanged(timestamp: Fraction, data: CursorPosChangedData): void {
+        return;
+    }
+
+    public pauseOccurred(o: object): void {
+        return;
+    }
+
+    public selectionEndReached(o: object): void {
+        this.playPauseButton.reset();
+    }
+
+    public resetOccurred(o: object): void {
+        return;
+    }
 
+    public notesPlaybackEventOccurred(o: object): void {
+        return;
     }
 }

+ 11 - 0
src/Playback/UIComponents/ControlPanel/PlayPauseButton.ts

@@ -39,4 +39,15 @@ export class PlayPauseButton {
   public listen(listener: (state?: PlayPauseButtonState) => any): void {
     this.listeners.push(listener);
   }
+
+  public reset(): void {
+    if (this.state === "playing") {
+      this.state = "paused";
+      this.el.classList.remove("playing");
+
+      for (const listener of this.listeners) {
+        listener(this.state);
+      }
+    }
+  }
 }