using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using VCRlogic; public static class SMvcr { private static StateVCR _concreteState; public delegate void VCREventHandler(); public static event VCREventHandler evStopbutton; public static event VCREventHandler evEndtape; public static event VCREventHandler evRecordbutton; public static event VCREventHandler evPlaybutton; public static event VCREventHandler evBeginningtape; public static event VCREventHandler evRewindbutton; public static event VCREventHandler evFastforwardbutton; public delegate void StatusLabelHandler(StatusEventArgs e); public static event StatusLabelHandler evUpdateStatus; public static void initSMvcr() { setState(new SvcrStandBy()); } public static void triggerUpdateLabel(string txt) { var e = new StatusEventArgs(txt); //trigger handler if (evUpdateStatus != null) { evUpdateStatus(e); } } public static void setState(StateVCR e) { _concreteState = null; _concreteState = e; } public static void stop() { if (evStopbutton != null) { evStopbutton(); } } public static void record() { if (SMtape.getState() is StapeTapeInNotEnd) { if (evRecordbutton != null) { evRecordbutton(); } } } public static void play() { if (SMtape.getState() is StapeTapeInNotEnd) { if (evPlaybutton != null) { evPlaybutton(); } } } public static void rewind() { if (SMtape.getState() is StapeTapeInEnd) { if (evRewindbutton != null) { evRewindbutton(); } } } public static void fastforward() { if (SMtape.getState() is StapeTapeInNotEnd) { if (evFastforwardbutton != null) { evFastforwardbutton(); } } } public static void tapeEnd() { if (evEndtape != null) { evEndtape(); } } public static void tapeBeginn() { if (evBeginningtape != null) { evBeginningtape(); } } } public abstract class StateVCR { public abstract void evStopbutton(); public abstract void evEndtape(); public abstract void evRecordbutton(); public abstract void evPlaybutton(); public abstract void evBeginningtape(); public abstract void evRewindbutton(); public abstract void evFastforwardbutton(); } public class SvcrStandBy : StateVCR { public SvcrStandBy() { Debug.Print("Standby\n"); SMvcr.triggerUpdateLabel("Standby"); SMvcr.evRecordbutton += evRecordbutton; SMvcr.evPlaybutton += evPlaybutton; SMvcr.evRewindbutton += evRewindbutton; } public override void evStopbutton() { } public override void evEndtape() { } public override void evRecordbutton() { SMvcr.evRecordbutton -= evRecordbutton; SMvcr.evPlaybutton -= evPlaybutton; SMvcr.evRewindbutton -= evRewindbutton; SMvcr.setState(new SvcrRecord()); } public override void evPlaybutton() { SMvcr.evRecordbutton -= evRecordbutton; SMvcr.evPlaybutton -= evPlaybutton; SMvcr.evRewindbutton -= evRewindbutton; SMvcr.setState(new SvcrPlay()); } public override void evBeginningtape() { } public override void evRewindbutton() { SMvcr.evRecordbutton -= evRecordbutton; SMvcr.evPlaybutton -= evPlaybutton; SMvcr.evRewindbutton -= evRewindbutton; SMvcr.setState(new SvcrRewind()); } public override void evFastforwardbutton() { } } public class SvcrPlay : StateVCR { public SvcrPlay() { Debug.Print("Play\n"); SMvcr.triggerUpdateLabel("Play"); SMvcr.evStopbutton += evStopbutton; SMvcr.evEndtape += evEndtape; SMvcr.evRewindbutton += evRewindbutton; SMvcr.evFastforwardbutton += evFastforwardbutton; } public override void evStopbutton() { SMvcr.evStopbutton -= evStopbutton; SMvcr.evEndtape -= evEndtape; SMvcr.evRewindbutton -= evRewindbutton; SMvcr.evFastforwardbutton -= evFastforwardbutton; SMvcr.setState(new SvcrStandBy()); } public override void evEndtape() { SMvcr.evStopbutton -= evStopbutton; SMvcr.evEndtape -= evEndtape; SMvcr.evRewindbutton -= evRewindbutton; SMvcr.evFastforwardbutton -= evFastforwardbutton; SMvcr.setState(new SvcrStandBy()); } public override void evRecordbutton() { } public override void evPlaybutton() { } public override void evBeginningtape() { } public override void evRewindbutton() { SMvcr.evStopbutton -= evStopbutton; SMvcr.evEndtape -= evEndtape; SMvcr.evRewindbutton -= evRewindbutton; SMvcr.evFastforwardbutton -= evFastforwardbutton; SMvcr.setState(new SvcrRewind()); } public override void evFastforwardbutton() { SMvcr.evStopbutton -= evStopbutton; SMvcr.evEndtape -= evEndtape; SMvcr.evRewindbutton -= evRewindbutton; SMvcr.evFastforwardbutton -= evFastforwardbutton; SMvcr.setState(new SvcrFastForward()); } } public class SvcrRewind : StateVCR { public SvcrRewind() { Debug.Print("Rewind\n"); SMvcr.triggerUpdateLabel("Rewind"); SMvcr.evStopbutton += evStopbutton; SMvcr.evBeginningtape += evBeginningtape; SMvcr.evPlaybutton += evPlaybutton; SMvcr.evFastforwardbutton += evFastforwardbutton; } public override void evStopbutton() { SMvcr.evStopbutton -= evStopbutton; SMvcr.evBeginningtape -= evBeginningtape; SMvcr.evPlaybutton -= evPlaybutton; SMvcr.evFastforwardbutton -= evFastforwardbutton; SMvcr.setState(new SvcrStandBy()); } public override void evEndtape() { } public override void evRecordbutton() { } public override void evPlaybutton() { SMvcr.evStopbutton -= evStopbutton; SMvcr.evBeginningtape -= evBeginningtape; SMvcr.evPlaybutton -= evPlaybutton; SMvcr.evFastforwardbutton -= evFastforwardbutton; SMvcr.setState(new SvcrPlay()); } public override void evBeginningtape() { SMvcr.evStopbutton -= evStopbutton; SMvcr.evBeginningtape -= evBeginningtape; SMvcr.evPlaybutton -= evPlaybutton; SMvcr.evFastforwardbutton -= evFastforwardbutton; SMvcr.setState(new SvcrStandBy()); } public override void evRewindbutton() { } public override void evFastforwardbutton() { SMvcr.evStopbutton -= evStopbutton; SMvcr.evBeginningtape -= evBeginningtape; SMvcr.evPlaybutton -= evPlaybutton; SMvcr.evFastforwardbutton -= evFastforwardbutton; SMvcr.setState(new SvcrFastForward()); } } public class SvcrFastForward : StateVCR { public SvcrFastForward() { Debug.Print("FastForward\n"); SMvcr.triggerUpdateLabel("FastForward"); SMvcr.evStopbutton += evStopbutton; SMvcr.evEndtape += evEndtape; SMvcr.evRewindbutton += evRewindbutton; } public override void evStopbutton() { SMvcr.evStopbutton -= evStopbutton; SMvcr.evEndtape -= evEndtape; SMvcr.evRewindbutton -= evRewindbutton; SMvcr.setState(new SvcrStandBy()); } public override void evEndtape() { SMvcr.evStopbutton -= evStopbutton; SMvcr.evEndtape -= evEndtape; SMvcr.evRewindbutton -= evRewindbutton; SMvcr.setState(new SvcrStandBy()); } public override void evRecordbutton() { } public override void evPlaybutton() { } public override void evBeginningtape() { } public override void evRewindbutton() { SMvcr.evStopbutton -= evStopbutton; SMvcr.evEndtape -= evEndtape; SMvcr.evRewindbutton -= evRewindbutton; SMvcr.setState(new SvcrRewind()); } public override void evFastforwardbutton() { } } public class SvcrRecord : StateVCR { public SvcrRecord() { Debug.Print("Record\n"); SMvcr.triggerUpdateLabel("Record"); SMvcr.evStopbutton += evStopbutton; SMvcr.evEndtape += evEndtape; } public override void evStopbutton() { SMvcr.evStopbutton -= evStopbutton; SMvcr.evEndtape -= evEndtape; SMvcr.setState(new SvcrStandBy()); } public override void evEndtape() { SMvcr.evStopbutton -= evStopbutton; SMvcr.evEndtape -= evEndtape; SMvcr.setState(new SvcrStandBy()); } public override void evRecordbutton() { } public override void evPlaybutton() { } public override void evBeginningtape() { } public override void evRewindbutton() { } public override void evFastforwardbutton() { } } public class StatusEventArgs { public StatusEventArgs(string txt) { Text = txt; } public string Text { get; private set; } }