using QuikDawEditor.EditingClasses; using System.Collections.Generic; using System.Windows; using static QuikDawEditor.EDITING.StaticProperties; using static QuikDawEditor.EDITING.MiscMethods; using System.Text.Json; using System; namespace QuikDawEditor.Undo; //Project level undo actions public class MasterVolumeChangeUndo : UndoClass { float restoreVolume; public string UndoMainValue { get { return restoreVolume.ToString(); } } public MasterVolumeChangeUndo(float volume) { restoreVolume = volume; } public override void Undo() { editingProject.MasterTrack.Volume = restoreVolume; } } public class MasterTrackShowHideUndo : UndoClass { public string UndoMainValue { get { return editingProject.MasterTrack.IsTrackCollapsed ? "Show" : "Hide"; } } public MasterTrackShowHideUndo(){ } public override void Undo() { editingProject.MasterTrack.IsTrackCollapsed = !editingProject.MasterTrack.IsTrackCollapsed; } } public class ArrangeMarkerAddUndo : UndoClass { public string UndoMainValue { get { return "Delete"; } } int MarkerIndex; public ArrangeMarkerAddUndo(int markerIndex) { MarkerIndex = markerIndex; } public override void Undo() { editingProject.Markers.RemoveAt(MarkerIndex); } } public class ArrangeMarkerDeleteUndo : UndoClass { public string UndoMainValue { get { return "Restore (" + MarkerName + ")"; } } int MarkerIndex; string MarkerName; double MarkerMs; double MarkerWidth; string MarkerColor; public ArrangeMarkerDeleteUndo(int markerIndex, string markerName, double markerMs, double markerWidth, string markerColor) { MarkerIndex = markerIndex; MarkerName = markerName; MarkerMs = markerMs; MarkerWidth = markerWidth; MarkerColor = markerColor; } public override void Undo() { Marker newMarker = new Marker() { Name = MarkerName, timePosMs = MarkerMs, widthMs = MarkerWidth, markerBackground = MarkerColor }; editingProject.Markers.Insert(MarkerIndex, newMarker); } } public class ArrangeMarkerNameChangeUndo : UndoClass { public string UndoMainValue { get { return MarkerName; } } int MarkerIndex; string MarkerName; public ArrangeMarkerNameChangeUndo(int markerIndex, string markerName) { MarkerIndex = markerIndex; MarkerName = markerName; } public override void Undo() { editingProject.Markers[MarkerIndex].Name = MarkerName; } } public class ArrangeMarkerPosChangeUndo : UndoClass { public string UndoMainValue { get { return "Pos: " + MarkerMs.ToString(); } } int MarkerIndex; double MarkerMs; public ArrangeMarkerPosChangeUndo(int markerIndex, double markerPosMs) { MarkerIndex = markerIndex; MarkerMs = markerPosMs; } public override void Undo() { editingProject.Markers[MarkerIndex].timePosMs = MarkerMs; } } public class ArrangeMarkerWidthChangeUndo : UndoClass { public string UndoMainValue { get { return "Width: " + MarkerWidthMs.ToString(); } } int MarkerIndex; double MarkerWidthMs; public ArrangeMarkerWidthChangeUndo(int markerIndex, double markerWidthMs) { MarkerIndex = markerIndex; MarkerWidthMs = markerWidthMs; } public override void Undo() { editingProject.Markers[MarkerIndex].widthMs = MarkerWidthMs; } } public class ArrangeMarkerColorChangeUndo : UndoClass { public string UndoMainValue { get { return "Color: " + MarkerColor; } } int MarkerIndex; string MarkerColor; public ArrangeMarkerColorChangeUndo(int markerIndex, string markerColor) { MarkerIndex = markerIndex; MarkerColor = markerColor; } public override void Undo() { editingProject.Markers[MarkerIndex].markerBackground = MarkerColor; } } public class LyricLineTimePosChangeUndo : UndoClass { public string UndoMainValue { get { return "Pos: " + LineMs.ToString(); } } int LineIndex; double LineMs; public LyricLineTimePosChangeUndo(int showLyricLineIndex, double lyricLinePosMs) { LineIndex = showLyricLineIndex; LineMs = lyricLinePosMs; } public override void Undo() { editingProject.shownLyricLines[LineIndex].timePosMs = LineMs; if (LineIndex > 0) editingProject.shownLyricLines[LineIndex - 1].UpdateLyricLine(); } } public class BPMChangeUndo : UndoClass { public string UndoMainValue { get { return BPMValue.ToString(); } } double BPMValue; public BPMChangeUndo(double bpmvalue) { BPMValue = bpmvalue; PreventWhilePlaying = true; } public override void Undo() {projPlayer.BeatsPerMinuteProject = BPMValue; } } public class BeatsPerMeasureToggleUndo : UndoClass { public string UndoMainValue { get { return editingProject.BeatsPerMeasure == 3 ? "TimeSig: 4/4" : "Time Sig: 3/4"; } } public BeatsPerMeasureToggleUndo() { } public override void Undo() { editingProject.ToggleBeatsPerMeasure(); } } public class TimeBeatsViewToggleUndo : UndoClass { public string UndoMainValue { get { return editingProject.IsTimePlayScale ? "Beats view" : "Time view"; } } public TimeBeatsViewToggleUndo() { } public override void Undo() { editingProject.ToggleTimeBeatsView(); } } public class DeleteSelectedClipsUndo : UndoClass { public string UndoMainValue { get { return "Selected clips delete count: " + DeletedClipJsons.Count.ToString(); } } public List DeletedClipJsons; public List DeletedClipIndexes; public List DeletedTrackIDs; public DeleteSelectedClipsUndo(List deletedTrackIDs, List deletedClipIndexes, List deletedClipJsons) { DeletedTrackIDs = deletedTrackIDs; DeletedClipIndexes = deletedClipIndexes; DeletedClipJsons = deletedClipJsons; } public override void Undo() { for (int delno = 0; delno < DeletedTrackIDs.Count; delno++) { Track undoTrack = GetTrackFromID(DeletedTrackIDs[delno]); Clip restoreClip = (Clip)JsonSerializer.Deserialize(DeletedClipJsons[delno], typeof(Clip)); restoreClip.myTrack = undoTrack; try { if (restoreClip.IsAudioClip) { //Create clipsampleprovider for clip undoTrack.AddClipSampleProviderToClip(restoreClip); restoreClip.ApplyWaveBitmapSourcesToImage(); } } catch (Exception ex) { MessageBox.Show("error undoing clip:\n" + ex.Message); } undoTrack.Clips.Insert(DeletedClipIndexes[delno], restoreClip); } } }