public virtual void OnImportsSatisfied() { var windowMessages = Observable.FromEventPattern <WindowEventArgs>(FHost, "WindowAdded") .Select(p => p.EventArgs.Window) .Merge( Observable.FromEventPattern <ComponentModeEventArgs>(FHost, "AfterComponentModeChange") .Select(p => p.EventArgs.Window) ) .OfType <Window>() .Where(w => w.UserInputWindow != null && w.UserInputWindow.InputWindowHandle != IntPtr.Zero) .Where(w => !FSubclasses.Any(s => s.HWnd == w.UserInputWindow.InputWindowHandle)) .Select(w => new { subclass = Subclass.Create(w.UserInputWindow.InputWindowHandle), sender = w.UserInputWindow }) .Do(_ => { _.subclass.Disposed += HandleSubclassDisposed; FSubclasses.Add(_.subclass); SubclassCreated(_.subclass); } ) .SelectMany(_ => Observable.FromEventPattern <WMEventArgs>(_.subclass, "WindowMessage"), (_, evp) => new EventPattern <WMEventArgs>(_.sender, evp.EventArgs)) .Where(_ => FEnabledIn.SliceCount > 0 && FEnabledIn[0]); var disabled = FEnabledIn.ToObservable(1) .DistinctUntilChanged() .Where(enabled => !enabled); Initialize(windowMessages, disabled); }
public virtual void OnImportsSatisfied() { FWMService.SubclassCreated += FWMService_SubclassCreated; FWMService.SubclassDestroyed += FWMService_SubclassDestroyed; var disabled = FEnabledIn.ToObservable(1) .DistinctUntilChanged() .Where(enabled => !enabled); var windowsMessages = FWMService.MessageNotifications .Where(_ => FEnabledIn.SliceCount > 0 && FEnabledIn[0]); Initialize(windowsMessages, disabled); }
public void Evaluate(int spreadMax) { MouseOut.ResizeAndDismiss( spreadMax, slice => { var mouseMoves = XIn.ToObservable(slice) .CombineLatest(YIn.ToObservable(slice), (x, y) => new Vector2D(x, y)) .Select(v => new MouseMoveNotification(ToMousePoint(v), FClientArea, this)); var mouseButtons = Observable.Merge( LeftButtonIn.ToObservable(slice).Select(x => Tuple.Create(x, MouseButtons.Left)), MiddleButtonIn.ToObservable(slice).Select(x => Tuple.Create(x, MouseButtons.Middle)), RightButtonIn.ToObservable(slice).Select(x => Tuple.Create(x, MouseButtons.Right)), X1ButtonIn.ToObservable(slice).Select(x => Tuple.Create(x, MouseButtons.XButton1)), X2ButtonIn.ToObservable(slice).Select(x => Tuple.Create(x, MouseButtons.XButton2)) ); var mouseDowns = mouseButtons.Where(x => x.Item1) .Select(x => x.Item2) .Select(x => new MouseDownNotification(ToMousePoint(new Vector2D(XIn[slice], YIn[slice])), FClientArea, x, this)); var mouseUps = mouseButtons.Where(x => !x.Item1) .Select(x => x.Item2) .Select(x => new MouseUpNotification(ToMousePoint(new Vector2D(XIn[slice], YIn[slice])), FClientArea, x, this)); var mouseWheelDeltas = MouseWheelIn.ToObservable(0) .StartWith(0) .Buffer(2, 1) .Select(b => b[1] - b[0]) .Select(d => new MouseWheelNotification(ToMousePoint(new Vector2D(XIn[slice], YIn[slice])), FClientArea, d * Const.WHEEL_DELTA, this)) .Cast <MouseNotification>(); var notifications = Observable.Merge <MouseNotification>( mouseMoves, mouseDowns, mouseUps, mouseWheelDeltas); return(new Mouse(notifications)); } ); }
protected IObservable <bool> GetDisabledNotifications(int slice) { return(EnabledIn.ToObservable(slice) .DistinctUntilChanged() .Where(enabled => !enabled)); }