Exemplo n.º 1
0
        public override bool OnCreateOptionsMenu(IMenu menu)
        {
            MenuInflater.Inflate(Resource.Layout.main_activity_actions, menu);

            menu.FindItem(Resource.Id.action_play)
            .DoWith(SetStartSTopIcon)
            .SetOnMenuItemClickListener(
                new MenuItemClickListener(
                    item => {
                StartStop();
                SetStartSTopIcon(item);
            }
                    )
                );

            foreach (var plugin in SignalRenders)
            {
                menu.Add(plugin.Title).OnClick(
                    item => SignalRenders.Enable(plugin)
                    );
            }

            foreach (var plugin in CanvasActions)
            {
                menu.Add(plugin.Title).OnClick(item =>
                                               plugin.IsEnabled = !plugin.IsEnabled
                                               );
            }
            menu.Add("ByFrame").OnClick(item => {
                if (PreProcessorType == PreProcessorType.Endless)
                {
                    PreProcessorType = PreProcessorType.ByFrame;
                    item.SetTitle("EndLess");
                }
                else
                {
                    PreProcessorType = PreProcessorType.Endless;
                    item.SetTitle("ByFrame");
                }
                _signalPreProcessor = PreProcessorFty.Create(_signalPreProcessor, PreProcessorType);
            });

            return(base.OnCreateOptionsMenu(menu));
        }
Exemplo n.º 2
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.Main);

            _surface = FindViewById <Xurface> (Resource.Id.surfaceView1);

            ActivityState = new ActivityState();

            ActivityState.Scale        = 10;
            ActivityState.SamplingRate = 200;
            ActivityState.SignalRate   = 200;


            Func <float> getSignal = () => {
                var halfHeight = ActivityState.Height / 2;
                var r          = _random.Next(-halfHeight, halfHeight);
                return(halfHeight + r);
            };

            var signalSource = Observable.Interval(TimeSpan.FromMilliseconds(ActivityState.SignalRate))
                               .Select(x => getSignal());

            var timer = Observable.Interval(TimeSpan.FromMilliseconds(ActivityState.SamplingRate))
                        .Select(x => (int)x);

            var signalSources = timer
                                // Setup , dimensions
                                .Do(x =>
                                    ActivityState.SetDimensions(_surface.Width, _surface.Height))
                                //Merge Signal and TimeLine
                                .Zip(signalSource, (x, y) => XPointFty.New(x, y));

            //IEnumerable<XPoint> points = new List<XPoint> ();

            _signalPreProcessor = PreProcessorFty.Create(_signalPreProcessor, PreProcessorType);

            subscribe = () => {
                //points = new List<XPoint>();
                if (_subscription != null)
                {
                    _subscription.Dispose();
                }
                _subscription = signalSources
                                .TakeWhile(x => ActivityState.State == States.Running)
                                //Arrange
                                .Select(rawSignal => {
                    return(_signalPreProcessor.Arrange(ActivityState, rawSignal).ToArray());
                })
                                .Subscribe(xpoints => {
                    var canvasActions = new List <Action <Canvas> >();

                    //Before Signal
                    canvasActions.AddRange(CanvasActions
                                           .Where(plugin => plugin.IsEnabled && plugin.Order == CanvasActionOrder.BeforeSignal)
                                           .Select(plugin => plugin.GetAction(xpoints, ActivityState)));

                    // Highlander principle : Only One
                    canvasActions.Add(SignalRenders.FirstOrDefault(x => x.IsEnabled).GetAction(xpoints, ActivityState));

                    //After Signal
                    canvasActions.AddRange(CanvasActions
                                           .Where(plugin => plugin.IsEnabled && plugin.Order == CanvasActionOrder.AfterSignal)
                                           .Select(plugin => plugin.GetAction(xpoints, ActivityState)));

                    using (var _canvas = new Canvas()){
                        _surface.Drawit(_canvas, canvasActions.ToArray());
                    }

                    RunOnUiThread(_surface.Invalidate);
                }, /*onCompleted*/ subscribe);
            };


            Action Unsubscribe = () => {
                if (_subscription != null)
                {
                    _subscription.Dispose();
                }
            };

            ActivityState
            .Changed
            .Where(p => p.Name == "State")
            .Subscribe(p => {
                var state = p.Value as States?;

                switch (state)
                {
                case States.Running:
                    subscribe();
                    break;

                case States.Stopped:
                    Unsubscribe();
                    break;
                }
            });
        }