Beispiel #1
0
        FeedbackObserverFunc <KeyboardState, TKeyboardEvent> SelectionFeedback()
        {
            return(UI.Bind <KeyboardState, TKeyboardEvent>(state =>
            {
                return UIBindings <TKeyboardEvent> .Create(
                    Observable.CombineLatest(
                        state.Select(s => s.Data.GetOrDefault(s.Layer)),
                        state.Select(s => s.Layer).DistinctUntilChanged(),
                        (a, b) => Tuple.Create(a, b)
                        )
                    .SubscribeOn(state.Scheduler)
                    .Subscribe(t =>
                {
                    var keyMap = t.Item1;
                    var layer = t.Item2;

                    foreach (var btn in keyboard.KeyViews)
                    {
                        var key = (KeyboardKey)btn.Tag;
                        if (key.Type == EKeyType.Normal)
                        {
                            btn.Content = keyMap.Get(key.IsoCode, "");
                        }
                        else if (key.Type == EKeyType.Shift)
                        {
                            Console.WriteLine("{0} {1}", key.Type, layer);
                            if (layer == ELayer.Shifted)
                            {
                                btn.BorderBrush = SystemColors.HighlightBrush;
                                btn.Background = SystemColors.HighlightBrush;
                            }
                            else
                            {
                                btn.ClearValue(BorderBrushProperty);
                                btn.ClearValue(BackgroundProperty);
                            }
                        }
                    }
                }),
                    // All shift buttons
                    Observable.Merge(keyboard.KeyViews
                                     .Where(btn => ((KeyboardKey)btn.Tag).Type == EKeyType.Shift)
                                     .Select(btn => btn.ReactiveClick())
                                     ).Select(_ => new KeyboardEvent.ToggleShift()),
                    // All normal buttons
                    Observable.Merge(keyboard.KeyViews
                                     .Where(key => ((KeyboardKey)key.Tag).Type == EKeyType.Normal)
                                     .Select(btn => btn.ReactiveClick()))
                    .Select(evt => (Button)evt.Sender)
                    .Select(btn => (KeyboardKey)btn.Tag)
                    .Select(key => new KeyboardEvent.SetSelectedKey(key))
                    );
            }));
        }
Beispiel #2
0
 FeedbackObserverFunc <KeyboardState, TKeyboardEvent> PropertiesFeedback()
 {
     return(UI.Bind <KeyboardState, TKeyboardEvent>(state =>
     {
         return UIBindings <TKeyboardEvent> .Create(
             state.Where(s => s.SelectedKey != null).Subscribe(s =>
         {
             AugmentPropField(s, ELayer.Default, txtKeyDefault);
             AugmentPropField(s, ELayer.Shifted, txtKeyShifted);
             HighlightSelectedKey(s.SelectedKey);
         }),
             txtKeyDefault.ReactiveTextChanged()
             .Select(_ => new KeyboardEvent.SetKeyValue(ELayer.Default, txtKeyDefault.Text)),
             txtKeyShifted.ReactiveTextChanged()
             .Select(_ => new KeyboardEvent.SetKeyValue(ELayer.Shifted, txtKeyShifted.Text))
             );
     }));
 }