public Form1() { InitializeComponent(); startBtn.Click += (o, s) => runningEvent.Fire(true); stopBtn.Click += (o, s) => { degreesSignal.Stop(); runningEvent.Fire(false); }; frequency.ValueChanged += (o, s) => intervalChanged.Fire(frequency.Value); degreesSignal = new Signal<double>(new AutoDouble(0.0, 0.001), Frequency.Hz(0.0), this.CreateDispatcher()); degreesSignal.Subscribe(SetDegValue); signalTickCount = degreesSignal.Snapshot(new AutoLong()); signalTickCount.Subscribe(SetTickCount); radiansSignal = degreesSignal.Map(d => d * RadsPerDeg); radiansSignal.Subscribe(SetRadValue); sineSignal = radiansSignal.Map(Math.Sin); sineSignal.Subscribe(SetSinValue); cosineSignal = radiansSignal.Map(Math.Cos); cosineSignal.Subscribe(SetCosValue); runningEvent = new FirableEvent<bool>(); runningEvent.Subscribe(r => { degreesSignal.Running = r; }); runningBehavior = runningEvent.Hold(false); runningBehavior.SubscribeWithInitialFire(EnableControls); intervalChanged = new FirableEvent<decimal>(); intervalBehavior = intervalChanged.Hold(frequency.Value); intervalBehavior.Map(Frequency.Hz).SubscribeWithInitialFire(FrequencyChanged); }
private void InitializeMouseHandler() { mouseButtonEvent = new FirableEvent<MouseStatus>(); mouseMoveEvent = new FirableEvent<MouseEventArgs>(); mouseButtonBehavior = mouseButtonEvent.Hold(MouseStatus.Up); this.mouseButtonDown = new EqualityPredicate<MouseStatus>(mouseButtonBehavior, MouseStatus.Down); mouseDragEvent = mouseMoveEvent.Gate(this.mouseButtonDown); mouseButtonBehavior.SubscribeWithInitialFire(a => { status.Text = string.Format("{0} {1}", a, DateTime.Now); }); mouseDragEvent.Map(e => new Tuple<string, string>(e.X.ToString(), e.Y.ToString())).Subscribe(t => { x.Text = t.Item1; y.Text = t.Item2; }); MouseMove += (s, e) => mouseMoveEvent.Fire(e); MouseDown += (s, e) => mouseButtonEvent.Fire(MouseStatus.Down); MouseUp += (s, e) => mouseButtonEvent.Fire(MouseStatus.Up); }