Beispiel #1
0
        protected virtual void UpdateCommonTagsPredicates()
        {
            if (Project == null)
            {
                return;
            }
            bool oldIgnoreEvents = ViewModel.Filters.IgnoreEvents;

            ViewModel.Filters.IgnoreEvents = true;
            ViewModel.CommonTagsPredicate.Clear();

            var tags = Project.Dashboard.Model.CommonTagsByGroup;

            var listPredicates = new List <IPredicate <TimelineEventVM> > ();
            Expression <Func <TimelineEventVM, bool> > noTagsExpression = ev => true;

            foreach (var tagGroup in tags)
            {
                var tagsPredicates = new List <IPredicate <TimelineEventVM> > ();
                noTagsExpression = noTagsExpression.And(ev => !tagGroup.Value.Intersect(ev.Model.Tags).Any());

                Expression <Func <TimelineEventVM, bool> > tagGroupExpression = ev => ev.Model.Tags.Any(tag => tag.Group == tagGroup.Key);
                var tagGroupPredicate = new OrPredicate <TimelineEventVM> {
                    Name        = string.IsNullOrEmpty(tagGroup.Key) ? "General tags" : tagGroup.Key,
                    DisplayName = string.IsNullOrEmpty(tagGroup.Key) ? Catalog.GetString("General tags") : tagGroup.Key,
                };

                tagsPredicates.Add(new Predicate {
                    Name        = "None",
                    DisplayName = Catalog.GetString("None"),
                    Expression  = ev => !ev.Model.Tags.Any(tag => tag.Group == tagGroup.Key)
                });

                foreach (var tag in tagGroup.Value)
                {
                    tagsPredicates.Add(new Predicate {
                        Name        = tag.Value,
                        DisplayName = tag.Value,
                        Expression  = tagGroupExpression.And(ev => ev.Model.Tags.Contains(tag))
                    });
                }
                tagGroupPredicate.AddRange(tagsPredicates);
                listPredicates.Add(tagGroupPredicate);
            }

            ViewModel.CommonTagsPredicate.AddRange(listPredicates);
            ViewModel.Filters.IgnoreEvents = oldIgnoreEvents;
            if (!ViewModel.Filters.IgnoreEvents)
            {
                ViewModel.Filters.EmitPredicateChanged();
            }
        }
Beispiel #2
0
        protected override void UpdateTeamsPredicates()
        {
            bool oldIgnoreEvents = ViewModel.Filters.IgnoreEvents;

            ViewModel.Filters.IgnoreEvents = true;
            ViewModel.TeamsPredicate.Clear();
            var teamsPredicates = new List <IPredicate <TimelineEventVM> > ();

            LMTimelineVM lmTimeline = (LMTimelineVM)ViewModel;
            LMTeamVM     homeTeamVM = (LMTeamVM)lmTimeline.HomeTeamTimelineVM.Team;
            LMTeamVM     awayTeamVM = (LMTeamVM)lmTimeline.AwayTeamTimelineVM.Team;

            teamsPredicates.Add(new Predicate {
                Name       = Catalog.GetString("No team / player tagged"),
                Expression = ev =>
                             (!(ev.Model as LMTimelineEvent).Teams.Any() &&
                              !(ev.Model as LMTimelineEvent).Players.Any())
            });

            foreach (var team in new LMTeamVM [] { homeTeamVM, awayTeamVM })
            {
                var playersPredicates = new List <IPredicate <TimelineEventVM> > ();
                var teamPredicate     = new OrPredicate <TimelineEventVM> {
                    Name = team.Name,
                };
                playersPredicates.Add(new Predicate {
                    Name       = Catalog.GetString("Team tagged"),
                    Expression = ev =>
                                 (ev.Model as LMTimelineEvent).Teams.Contains(team.Model)
                });
                foreach (var player in team)
                {
                    playersPredicates.Add(new Predicate {
                        Name       = player.Model.Name,
                        Expression = ev =>
                                     (ev.Model as LMTimelineEvent).Players.Contains(player.Model)
                    });
                }
                teamPredicate.AddRange(playersPredicates);
                teamsPredicates.Add(teamPredicate);
            }
            ViewModel.TeamsPredicate.AddRange(teamsPredicates);
            ViewModel.Filters.IgnoreEvents = oldIgnoreEvents;
            if (!ViewModel.Filters.IgnoreEvents)
            {
                ViewModel.Filters.EmitPredicateChanged();
            }
        }
Beispiel #3
0
        protected virtual void UpdateEventTypesPredicates(object sender = null, NotifyCollectionChangedEventArgs e = null)
        {
            bool oldIgnoreEvents = ViewModel.Filters.IgnoreEvents;

            ViewModel.Filters.IgnoreEvents = true;
            UpdatePreviousPredicatesList(ViewModel.EventTypesPredicate);
            ViewModel.EventTypesPredicate.Clear();
            var predicates = new List <IPredicate <TimelineEventVM> > ();

            foreach (var eventType in ViewModel.EventTypesTimeline)
            {
                IPredicate <TimelineEventVM> predicate;
                List <Tag> tagList = new List <Tag> ();
                Expression <Func <TimelineEventVM, bool> > eventTypeExpression = ev => ev.Model.EventType.Equals(eventType.Model);

                var analysisEventType = eventType.Model as AnalysisEventType;
                if (analysisEventType != null && analysisEventType.Tags.Any())
                {
                    CompositePredicate <TimelineEventVM> composedEventTypePredicate;
                    var composedPredicates = new List <IPredicate <TimelineEventVM> > ();
                    predicate = composedEventTypePredicate = new OrPredicate <TimelineEventVM> {
                        Name        = eventType.EventTypeVM.Name,
                        DisplayName = eventType.EventTypeVM.Name,
                    };

                    // We want subcategories to be flat, regardless of the group.
                    foreach (var tagGroup in analysisEventType.TagsByGroup)
                    {
                        Expression <Func <TimelineEventVM, bool> > tagGroupExpression = ev => ev.Model.Tags.Any(tag => tag.Group == tagGroup.Key);
                        foreach (var tag in tagGroup.Value)
                        {
                            composedPredicates.Add(new Predicate {
                                Name        = tag.Value,
                                DisplayName = tag.Value,
                                Expression  = eventTypeExpression.And(tagGroupExpression.And(ev => ev.Model.Tags.Contains(tag))),
                                Active      = GetPreviousActiveValue(tag.Value)
                            });
                            tagList.Add(tag);
                        }
                    }

                    composedPredicates.Add(new Predicate {
                        Name        = "No subcategories",
                        DisplayName = Catalog.GetString("No subcategories"),
                        Expression  = eventTypeExpression.And(ev => !ev.Model.Tags.Intersect(tagList).Any()),
                        Active      = GetPreviousActiveValue("No subcategories")
                    });
                    composedEventTypePredicate.AddRange(composedPredicates);
                }
                else
                {
                    predicate = new Predicate {
                        Name        = eventType.EventTypeVM.Name,
                        DisplayName = eventType.EventTypeVM.Name,
                        Expression  = eventTypeExpression,
                        Active      = GetPreviousActiveValue(eventType.EventTypeVM.Name)
                    };
                }
                predicates.Add(predicate);
            }
            ViewModel.EventTypesPredicate.AddRange(predicates);
            ViewModel.Filters.IgnoreEvents = oldIgnoreEvents;
            if (!ViewModel.Filters.IgnoreEvents)
            {
                ViewModel.Filters.EmitPredicateChanged();
            }
        }