Ejemplo n.º 1
0
        public CommandFilterViewModel()
        {
            void PopulateCollection <T>(ref List <string> collection, Func <string, string> selector = null, Func <string, bool> validation = null) where T : Enum
            {
                collection = new List <string>();
                // default selection = no filter
                collection.Add(DESELECTION_DESCRIPTION);

                foreach (string enumVal in Enum.GetNames(typeof(T)))
                {
                    if (!validation?.Invoke(enumVal) ?? false)
                    {
                        continue;
                    }
                    string selectorVal = selector?.Invoke(enumVal) ?? enumVal;
                    if (collection.Contains(selectorVal))
                    {
                        continue;
                    }
                    else
                    {
                        collection.Add(selectorVal);
                    }
                }
            }

            int?SubscriptionBuilder(int?value, ref List <string> collection) => !value.HasValue ? value : value.Value == 0 || value.Value == -1 ? null : value;

            PopulateCollection <Transceiver>(ref _transceivers);
            PopulateCollection <Cmd>(ref _cmdSet, cmd => CmdAttribute.TryGetAttribute(Enum.Parse <Cmd>(cmd)).CmdSetDescription);
            PopulateCollection <Comms>(ref _comms);
            PopulateCollection <Ack>(ref _acks);

            this.WhenAnyValue(instance => instance.SrcModuleSelectionIndex).Subscribe(idx => SrcModuleSelectionIndex   = SubscriptionBuilder(idx, ref _transceivers));
            this.WhenAnyValue(instance => instance.DestModuleSelectionIndex).Subscribe(idx => DestModuleSelectionIndex = SubscriptionBuilder(idx, ref _transceivers));
            this.WhenAnyValue(instance => instance.CmdSetSelectionIndex).Subscribe(idx => CmdSetSelectionIndex         = SubscriptionBuilder(idx, ref _cmdSet));
            this.WhenAnyValue(instance => instance.CmdSelectionIndex).Subscribe(idx => CmdSelectionIndex     = SubscriptionBuilder(idx, ref _cmd));
            this.WhenAnyValue(instance => instance.CommsSelectionIndex).Subscribe(idx => CommsSelectionIndex = SubscriptionBuilder(idx, ref _comms));
            this.WhenAnyValue(instance => instance.AcksSelectionIndex).Subscribe(idx => AcksSelectionIndex   = SubscriptionBuilder(idx, ref _acks));

            this.WhenAnyValue(instance => instance.SrcModuleSelectionIndex).Subscribe(idx => DjiNetworkPacketPool?.EvaluateFilterOnPackets());
            this.WhenAnyValue(instance => instance.DestModuleSelectionIndex).Subscribe(idx => DjiNetworkPacketPool?.EvaluateFilterOnPackets());
            this.WhenAnyValue(instance => instance.CmdSetSelectionIndex).Subscribe(idx => DjiNetworkPacketPool?.EvaluateFilterOnPackets());
            this.WhenAnyValue(instance => instance.CmdSelectionIndex).Subscribe(idx => DjiNetworkPacketPool?.EvaluateFilterOnPackets());
            this.WhenAnyValue(instance => instance.CommsSelectionIndex).Subscribe(idx => DjiNetworkPacketPool?.EvaluateFilterOnPackets());
            this.WhenAnyValue(instance => instance.AcksSelectionIndex).Subscribe(idx => DjiNetworkPacketPool?.EvaluateFilterOnPackets());

            // restrict the cmd based on the cmdSet
            this.WhenAnyValue(instance => instance.CmdSetSelectionIndex).Subscribe(idx =>
            {
                if (SubscriptionBuilder(idx, ref _cmdSet) == null)
                {
                    return;
                }

                CmdAttribute GetAttributeByName(string name) => CmdAttribute.TryGetAttribute(Enum.Parse <Cmd>(name));

                PopulateCollection <Cmd>(ref _cmd, cmd => GetAttributeByName(cmd).CmdDescription,
                                         cmd => GetAttributeByName(cmd).CmdSetDescription == _cmdSet[idx.Value]);

                this.RaisePropertyChanged(nameof(Cmd));
            });
        }
 public NetworkPacketIdRangeFilterViewModel() => this.WhenAnyValue(instance => instance.PacketRange).Subscribe(range => DjiNetworkPacketPool?.EvaluateFilterOnPackets());
 public IpAddressFilterViewModel()
 {
     this.WhenAnyValue(instance => instance.Drone).Subscribe(drone => DjiNetworkPacketPool?.EvaluateFilterOnPackets());
     this.WhenAnyValue(instance => instance.Operator).Subscribe(op => DjiNetworkPacketPool?.EvaluateFilterOnPackets());
 }
Ejemplo n.º 4
0
 public HexFilterViewModel() => this.WhenAnyValue(instance => instance.Hex).Subscribe(hex => DjiNetworkPacketPool?.EvaluateFilterOnPackets());
 public NumbericFilterViewModel()
 {
     this.WhenAnyValue(instance => instance.Numeric).Subscribe(numeric => DjiNetworkPacketPool?.EvaluateFilterOnPackets());
     this.WhenAnyValue(instance => instance.HasValue).Subscribe(hasValue => DjiNetworkPacketPool?.EvaluateFilterOnPackets());
 }