Exemplo n.º 1
0
        public void TestSaveLoadTimelineEvent()
        {
            IDReferenceResolver resolver = new IDReferenceResolver ();
            Player p = new Player ();
            AnalysisEventType evtType = new AnalysisEventType ();
            TimelineEvent evt = new TimelineEvent ();

            resolver.AddReference (null, p.ID.ToString (), p);
            resolver.AddReference (null, evtType.ID.ToString (), evtType);
            evt.Players.Add (p);
            evt.EventType = evtType;

            Document doc = db.GetDocument (evt.ID.ToString ());
            doc.Update ((UnsavedRevision rev) => {
                JObject jo = DocumentsSerializer.SerializeObject (evt, rev, db, resolver);
                Assert.AreEqual (p.ID, jo ["Players"] [0].Value<Guid> ());
                Assert.AreEqual (evtType.ID, jo ["EventType"].Value<Guid> ());
                IDictionary<string, object> props = jo.ToObject<IDictionary<string, object>> ();
                rev.SetProperties (props);
                return true;
            });

            /* Player has not been added to the db, as it was already referenced
             * by the IDReferenceResolver */
            Assert.AreEqual (1, db.DocumentCount);

            TimelineEvent evt2 = storage.Retrieve <TimelineEvent> (evt.ID);
            Assert.IsNotNull (evt2.EventType);
        }
Exemplo n.º 2
0
 /// <summary>
 /// Adds the default tags to a button
 /// </summary>
 /// <param name="ev">The event type where the tags will be added</param>
 public void AddDefaultTags(AnalysisEventType ev)
 {
     ev.Tags.Add(new Tag(Catalog.GetString("Success"),
                         Catalog.GetString("Outcome")));
     ev.Tags.Add(new Tag(Catalog.GetString("Failure"),
                         Catalog.GetString("Outcome")));
 }
Exemplo n.º 3
0
        /// <summary>
        /// Create a new <see cref="AnalysisEventButton"/> with the default values
        /// </summary>
        /// <returns>A new button.</returns>
        /// <param name="index">Index of this button used to name it</param>
        public override AnalysisEventButton CreateDefaultItem(int index)
        {
            AnalysisEventButton button;
            AnalysisEventType   evtype;
            Color  c = Colors.ButtonEventColor;
            HotKey h = new HotKey();

            evtype = new AnalysisEventType {
                Name       = "Event Type " + index,
                SortMethod = SortMethodType.SortByStartTime,
                Color      = c
            };
            AddDefaultTags(evtype);

            button = new AnalysisEventButton {
                EventType = evtype,
                Start     = new Time {
                    TotalSeconds = 10
                },
                Stop = new Time {
                    TotalSeconds = 10
                },
                HotKey = h,
                /* Leave the first row for the timers and score */
                Position = new Point(10 + (index % 7) * (CAT_WIDTH + 10),
                                     10 + (index / 7 + 1) * (CAT_HEIGHT + 10)),
                Width    = CAT_WIDTH,
                Height   = CAT_HEIGHT,
                ShowIcon = true,
            };
            return(button);
        }
Exemplo n.º 4
0
        public void SetUp()
        {
            // load model
            EventType e = new AnalysisEventType {
                Tags = new RangeObservableCollection <Tag> {
                    new Tag("Success", "Test")
                }
            };

            A = new AnalysisEventButton {
                Name = "A", EventType = e
            };
            B = new AnalysisEventButton {
                Name = "B", EventType = e
            };
            C = new AnalysisEventButton {
                Name = "C", EventType = e
            };
            model = new RangeObservableCollection <DashboardButton> ();
            model.AddRange(new List <DashboardButton> {
                A, B, C
            });
            CreateLink(A, B);
            CreateLink(B, C);
        }
Exemplo n.º 5
0
        public void TagsModification_NoTags_PropertyChangedEmitted()
        {
            bool   collectionChanged = false;
            bool   propertyChanged   = false;
            string propertyName      = "";
            var    model             = new AnalysisEventType {
                Name  = "Test1",
                Color = Color.Red
            };
            var viewModel = new EventTypeVM {
                Model = model,
            };

            model.Tags.CollectionChanged += (sender, e) => collectionChanged = true;
            viewModel.PropertyChanged    += (sender, e) => {
                propertyChanged = true;
                propertyName    = e.PropertyName;
            };

            model.Tags.Add(new Tag("tag", "group"));

            Assert.IsTrue(collectionChanged);
            Assert.IsTrue(propertyChanged);
            Assert.AreEqual("Collection_" + nameof(model.Tags), propertyName);
        }
Exemplo n.º 6
0
        public void TestRaiseCollectionPropertyChanged()
        {
            int evtCount          = 0;
            AnalysisEventType evt = new AnalysisEventType();

            evt.PropertyChanged += (sender, e) => evtCount++;

            evt.Tags = new RangeObservableCollection <Tag> ();

            Assert.AreEqual(1, evtCount);
        }
Exemplo n.º 7
0
        void HandleEditEventSubcategories(DashboardButton dashboardButton)
        {
            AnalysisEventButton button = (dashboardButton as AnalysisEventButton);
            AnalysisEventType   evt    = button.AnalysisEventType;
            EventTypeTagsEditor dialog = new EventTypeTagsEditor(this.Toplevel as Window);

            dialog.EventType = evt;
            dialog.Run();
            dialog.Destroy();
            ViewModel.Model.RemoveDeadLinks(button);
        }
Exemplo n.º 8
0
        public void TestQueryEventsByEventType()
        {
            AnalysisEventType evtType1 = new AnalysisEventType {
                Name = "Ball lost"
            };
            AnalysisEventType evtType2 = new AnalysisEventType {
                Name = "PC"
            };
            AnalysisEventType evtType3 = new AnalysisEventType {
                Name = "Recovery"
            };
            AnalysisEventType evtType4 = new AnalysisEventType {
                Name = "Throw-in"
            };
            AnalysisEventType evtType5 = new AnalysisEventType {
                Name = "Unused"
            };
            ScoreEventType score = new ScoreEventType {
                Name = "Goal"
            };

            var eventTypes = new List <EventType> {
                evtType1, evtType2, evtType3, evtType4, score
            };

            foreach (EventType evtType in eventTypes)
            {
                LMTimelineEvent evt = new LMTimelineEvent();
                evt.EventType = evtType;
                storage.Store(evt);
            }

            QueryFilter filter = new QueryFilter();

            filter.Add("EventType", evtType1);
            Assert.AreEqual(1, storage.Retrieve <LMTimelineEvent> (filter).Count());

            filter.Add("EventType", evtType4);
            Assert.AreEqual(1, storage.Retrieve <LMTimelineEvent> (filter).Count());

            filter.Add("EventType", evtType2, evtType3);
            Assert.AreEqual(2, storage.Retrieve <LMTimelineEvent> (filter).Count());

            filter.Add("EventType", eventTypes);
            Assert.AreEqual(5, storage.Retrieve <LMTimelineEvent> (filter).Count());

            filter.Add("EventType", evtType5);
            Assert.AreEqual(0, storage.Retrieve <LMTimelineEvent> (filter).Count());

            filter.Add("EventType", score);
            Assert.AreEqual(1, storage.Retrieve <LMTimelineEvent> (filter).Count());
        }
Exemplo n.º 9
0
        void EditEventSubcategories(DashboardButton dashboardButton)
        {
            AnalysisEventButton button = (dashboardButton as AnalysisEventButton);
            AnalysisEventType   evt    = button.AnalysisEventType;
            EventTypeTagsEditor dialog = new EventTypeTagsEditor(this.Toplevel as Window);

            dialog.EventType = evt;
            dialog.Run();
            dialog.Destroy();
            template.RemoveDeadLinks(button);
            Edited = true;
            Refresh();
        }
Exemplo n.º 10
0
        public void TestRaiseInCollectionChildren()
        {
            int evtCount          = 0;
            AnalysisEventType evt = new AnalysisEventType();

            evt.Tags = new RangeObservableCollection <Tag> ();

            evt.Tags.Add(new Tag("test"));
            evt.PropertyChanged += (sender, e) => evtCount++;
            evt.Tags [0].Value   = "TT";

            Assert.AreEqual(1, evtCount);
        }
Exemplo n.º 11
0
        void LoadEventType(AnalysisEventType eventType)
        {
            Button newGroupButton;

            var tagsByGroup = eventType.Tags.GroupBy(t => t.Group);

            foreach (var tagsGroup in tagsByGroup)
            {
                AddNewGroup(tagsGroup.Key, tagsGroup.ToList());
            }
            newGroupButton = CreateAddGroupButton();
            mainvbox.PackEnd(newGroupButton, false, true, 0);
            mainvbox.ShowAll();
        }
Exemplo n.º 12
0
        public void TestIsChangedSetBeforeRaising()
        {
            bool isChanged        = false;
            AnalysisEventType evt = new AnalysisEventType();

            evt.IsChanged        = false;
            evt.PropertyChanged += (sender, e) => {
                isChanged = evt.IsChanged;
            };

            evt.Name = "RRR";

            Assert.IsTrue(evt.IsChanged);
            Assert.IsTrue(isChanged);
        }
Exemplo n.º 13
0
        public void TestDoNotRaiseAfterRemovingCollectionChildren()
        {
            int evtCount          = 0;
            Tag tag               = new Tag("test");
            AnalysisEventType evt = new AnalysisEventType();

            evt.Tags = new RangeObservableCollection <Tag> ();

            evt.Tags.Add(tag);
            evt.Tags.Remove(tag);
            evt.PropertyChanged += (sender, e) => evtCount++;

            tag.Value = "TT";

            Assert.AreEqual(0, evtCount);
        }
Exemplo n.º 14
0
        public void TestRaiseCollectionChanged()
        {
            int               evtCount = 0;
            string            name     = null;
            AnalysisEventType evt      = new AnalysisEventType();

            evt.Tags             = new RangeObservableCollection <Tag> ();
            evt.PropertyChanged += (sender, e) => {
                evtCount++;
                name = e.PropertyName;
            };

            evt.Tags.Add(new Tag("test"));

            Assert.AreEqual(1, evtCount);
            Assert.AreEqual("Collection_Tags", name);
        }
Exemplo n.º 15
0
		public void Update ()
		{
			events = filter.VisiblePlays.Where (e => e.Players.Contains (player) && e.EventType.Equals (EventType)).ToList ();
			
			SubcategoriesStats = new List<SubCategoryStat> ();

			if (EventType is ScoreEventType) {
				// Total number of points
				TotalCount = events.Sum (e => (e as ScoreEvent).Score.Points);
				int eventsCount = events.Count ();
				SubCategoryStat substat = new SubCategoryStat (Catalog.GetString ("Score"));
				// Create percentual stats for each score subtype. The count here is the number of events not points.
				foreach (Score score in project.Scores) {
					var scores = events.Where (e => (e as ScoreEvent).Score == score);
					PercentualStat pStat = new PercentualStat (score.Name, scores.Count (), 0, 0, eventsCount);
					substat.OptionStats.Add (pStat);
				}
				SubcategoriesStats.Add (substat);
			} else if (EventType is PenaltyCardEventType) {
				TotalCount = events.Count;
				SubCategoryStat substat = new SubCategoryStat (Catalog.GetString ("Penalties"));
				foreach (PenaltyCard penalty in project.PenaltyCards) {
					var penalties = events.Where (e => (e as PenaltyCardEvent).PenaltyCard == penalty);
					PercentualStat pStat = new PercentualStat (penalty.Name, penalties.Count (), 0, 0, TotalCount);
					substat.OptionStats.Add (pStat);
				}
				SubcategoriesStats.Add (substat);
			} else {
				AnalysisEventType evType = EventType as AnalysisEventType;
				TotalCount = events.Count;
				
				SubcategoriesStats = new List<SubCategoryStat> ();
				var tagsByGroup = evType.TagsByGroup;
				foreach (string grp in tagsByGroup.Keys) {
					SubCategoryStat substat = new SubCategoryStat (grp);
					foreach (Tag t in tagsByGroup[grp]) {
						int count;
						count = events.Count (e => e.Tags.Contains (t));
						PercentualStat pStat = new PercentualStat (t.Value, count, 0, 0, events.Count);
						substat.OptionStats.Add (pStat);
					}
					SubcategoriesStats.Add (substat);
				}
			}
			
		}
Exemplo n.º 16
0
        public void TestAnalysisEventType()
        {
            AnalysisEventType at = new AnalysisEventType();

            Utils.CheckSerialization(at);

            Assert.IsNotNull(at.Tags);
            Assert.AreEqual(at.TagsByGroup.Count, 0);
            at.Tags.Add(new Tag("test1", "grp1"));
            at.Tags.Add(new Tag("test2", "grp1"));
            at.Tags.Add(new Tag("test3", "grp2"));

            var tbg = at.TagsByGroup;

            Assert.AreEqual(tbg.Count, 2);
            Assert.AreEqual(tbg ["grp1"].Count, 2);
            Assert.AreEqual(tbg ["grp2"].Count, 1);
        }
Exemplo n.º 17
0
        public void TestIsChanged()
        {
            EventType et = new EventType();

            Assert.IsTrue(et.IsChanged);
            et.IsChanged = false;
            et.Color     = Color.Green;
            Assert.IsTrue(et.IsChanged);
            et.IsChanged = false;
            et.FieldPositionIsDistance = true;
            Assert.IsTrue(et.IsChanged);
            et.IsChanged = false;
            et.HalfFieldPositionIsDistance = true;
            Assert.IsTrue(et.IsChanged);
            et.IsChanged = false;
            et.Name      = "name";
            Assert.IsTrue(et.IsChanged);
            et.IsChanged  = false;
            et.SortMethod = SortMethodType.SortByStartTime;
            Assert.IsTrue(et.IsChanged);
            et.IsChanged        = false;
            et.TagFieldPosition = true;
            Assert.IsTrue(et.IsChanged);
            et.IsChanged       = false;
            et.TagGoalPosition = true;
            Assert.IsTrue(et.IsChanged);
            et.IsChanged            = false;
            et.TagHalfFieldPosition = true;
            Assert.IsTrue(et.IsChanged);
            et.IsChanged = false;

            AnalysisEventType at = new AnalysisEventType();

            Assert.IsTrue(at.IsChanged);
            at.IsChanged = false;
            at.Tags.Add(new Tag(""));
            Assert.IsTrue(at.IsChanged);
            at.IsChanged = false;
            at.Tags      = null;
            Assert.IsTrue(at.IsChanged);
            at.IsChanged = false;
        }
Exemplo n.º 18
0
        public void TestTimelineEvent()
        {
            LMPlayer          p       = new LMPlayer();
            AnalysisEventType evtType = new AnalysisEventType();
            LMTimelineEvent   evt     = new LMTimelineEvent();

            Document             doc     = db.GetDocument(evt.ID.ToString());
            SerializationContext context = new SerializationContext(db, evt.GetType());

            context.Cache.AddReference(p);
            evt.Players.Add(p);
            evt.EventType = evtType;

            doc.Update((UnsavedRevision rev) => {
                JObject jo = DocumentsSerializer.SerializeObject(evt, rev, context);
                Assert.AreEqual(p.ID.ToString(), jo ["Players"] [0].Value <String> ());
                Assert.AreEqual(evtType.ID.ToString(), jo ["EventType"].Value <String> ());
                IDictionary <string, object> props = jo.ToObject <IDictionary <string, object> > ();
                rev.SetProperties(props);
                return(true);
            });

            /* LMPlayer has not been added to the db, as it was already referenced
             * by the IDReferenceResolver */
            Assert.AreEqual(2, db.DocumentCount);

            DocumentsSerializer.SaveObject(p, db);
            Assert.AreEqual(3, db.DocumentCount);

            LMTimelineEvent evt2 = storage.Retrieve <LMTimelineEvent> (evt.ID);

            Assert.IsNotNull(evt2.EventType);
            Assert.IsNotNull(evt2.DocumentID);

            storage.Delete(evt);
            Assert.AreEqual(3, db.DocumentCount);
            storage.Delete(p);
            Assert.AreEqual(2, db.DocumentCount);
            storage.Delete(evtType);
            Assert.AreEqual(1, db.DocumentCount);
        }
        public void Update()
        {
            events = filter.VisiblePlays.Where(e => ((LMTimelineEvent)e).Players.Contains(player) &&
                                               e.EventType.Equals(EventType)).Cast <LMTimelineEvent> ().ToList();

            SubcategoriesStats = new List <SubCategoryStat> ();

            if (EventType is ScoreEventType)
            {
                ScoreEventType scoreEventType = EventType as ScoreEventType;
                // Total number of points
                TotalCount = events.Count * scoreEventType.Score.Points;
                int eventsCount = events.Count();
            }
            else if (EventType is PenaltyCardEventType)
            {
                TotalCount = events.Count;
            }
            else
            {
                AnalysisEventType evType = EventType as AnalysisEventType;
                TotalCount = events.Count;

                SubcategoriesStats = new List <SubCategoryStat> ();
                var tagsByGroup = evType.TagsByGroup;
                foreach (string grp in tagsByGroup.Keys)
                {
                    SubCategoryStat substat = new SubCategoryStat(grp);
                    foreach (Tag t in tagsByGroup[grp])
                    {
                        int count;
                        count = events.Count(e => e.Tags.Contains(t));
                        PercentualStat pStat = new PercentualStat(t.Value, count, 0, 0, events.Count);
                        substat.OptionStats.Add(pStat);
                    }
                    SubcategoriesStats.Add(substat);
                }
            }
        }
Exemplo n.º 20
0
        void LoadEventType(AnalysisEventType eventType)
        {
            Button newGroupButton;

            var tagsByGroup = eventType.Tags.GroupBy (t => t.Group);

            foreach (var tagsGroup in tagsByGroup) {
                AddNewGroup (tagsGroup.Key, tagsGroup.ToList ());
            }
            newGroupButton = CreateAddGroupButton ();
            mainvbox.PackEnd (newGroupButton, false, true, 0);
            mainvbox.ShowAll ();
        }
Exemplo n.º 21
0
        void CreateEvents()
        {
            AnalysisEventType firstEventType  = ((AnalysisEventType)eventsFilterController.Project.Dashboard.ViewModels.OfType <EventButtonVM> ().First().EventType.Model);
            AnalysisEventType secondEventType = ((AnalysisEventType)eventsFilterController.Project.Dashboard.ViewModels.OfType <EventButtonVM> ().ElementAt(1).EventType.Model);
            AnalysisEventType thirdEventType  = ((AnalysisEventType)eventsFilterController.Project.Dashboard.ViewModels.OfType <EventButtonVM> ().ElementAt(2).EventType.Model);
            AnalysisEventType fourthEventType = ((AnalysisEventType)eventsFilterController.Project.Dashboard.ViewModels.OfType <EventButtonVM> ().ElementAt(3).EventType.Model);
            AnalysisEventType fiftEventType   = ((AnalysisEventType)eventsFilterController.Project.Dashboard.ViewModels.OfType <EventButtonVM> ().ElementAt(4).EventType.Model);

            Dictionary <string, List <Tag> > commonTagsByGroup = eventsFilterController.Project.Dashboard.Model.CommonTagsByGroup;

            Tag goodTag   = firstEventType.TagsByGroup ["Outcome"].ElementAt(0);
            Tag badTag    = firstEventType.TagsByGroup ["Outcome"].ElementAt(1);
            Tag leftTag   = new Tag("Left", "Position");
            Tag centerTag = new Tag("Center", "Position");
            Tag rightTag  = new Tag("Right", "Position");

            firstEventType.Tags.Add(leftTag);
            firstEventType.Tags.Add(centerTag);
            firstEventType.Tags.Add(rightTag);

            Tag otherTag = new Tag("tag value", "Other group");

            eventsFilterController.Project.Dashboard.SubViewModel.Model.Add(new TagButton {
                Name = "Other tag",
                Tag  = otherTag,
            });

            eventsFilterController.Project.Timers.First().Model.Nodes.Add(new TimeNode {
                Start = new Time(0),
                Stop  = new Time(10),
            });
            eventsFilterController.Project.Timers.First().Model.Nodes.Add(new TimeNode {
                Start = new Time(31),
                Stop  = new Time(60),
            });
            eventsFilterController.Project.Timers.First().Model.Nodes.Add(new TimeNode {
                Start = new Time(80),
                Stop  = new Time(100),
            });

            eventsFilterController.Project.Timers.Model.Add(new VAS.Core.Store.Timer {
                Name  = "timer 2",
                Nodes = new RangeObservableCollection <TimeNode> {
                    new TimeNode {
                        Start = new Time(0),
                        Stop  = new Time(50),
                    },
                }
            });

            timelineVM.FullTimeline.Model.Replace(new List <TimelineEvent> {
                new TimelineEvent {
                    Name      = "event 1, type 1, without player tags, first period left",
                    EventType = firstEventType,
                    Start     = new Time(0),                  // it starts outside the period
                    Stop      = new Time(20),                 // it ends inside the period
                },
                new TimelineEvent {
                    Name      = "event 2, type 1 + Bad + Attack, first team tagged, first period",
                    EventType = firstEventType,
                    Start     = new Time(11),                 // it starts inside the first period, but not the first timer
                    Stop      = new Time(30),                 // it ends inside the first period, but not in the second timer
                },
                new TimelineEvent {
                    Name      = "event 3, type 1 + Good + Defense, second team tagged, between first and second period",
                    EventType = firstEventType,
                    Start     = new Time(40),                 // it starts inside the 1st period
                    Stop      = new Time(60),                 // it ends inside the 2nd period
                },
                new TimelineEvent {
                    Name      = "event 4, type 1 + Bad + Left + Attack + Defense, first player from first team tagged, second period",
                    EventType = firstEventType,
                    Start     = new Time(60),                 // it starts inside the 2nd period
                    Stop      = new Time(80),                 // it ends inside the 2nd period
                },
                new TimelineEvent {
                    Name      = "event 5, type 2 + Good + Other Tag, first player from second team tagged, second period right",
                    EventType = secondEventType,
                    Start     = new Time(80),                  // it starts inside the 2nd period
                    Stop      = new Time(100),                 // it ends outside the 2nd period
                },
                new TimelineEvent {
                    Name      = "event 6, type 3 + Bad, first team and first player from first team tagged, no periods",
                    EventType = thirdEventType,
                    Start     = new Time(900),                  // It starts outside all periods
                    Stop      = new Time(1000),                 // It ends outside all periods, without touching them
                },
                new TimelineEvent {
                    Name      = "event 7, first team and first player from second team tagged, fill all periods",
                    EventType = fourthEventType,
                    Start     = new Time(0),                  // It starts outside all periods
                    Stop      = new Time(100),                // It ends outside all periods, touching them all
                },
                new TimelineEvent {
                    Name      = "event 8, type 3 + Other Tag, without player tags, first period left",
                    EventType = fiftEventType,
                    Start     = new Time(0),                  // it starts outside the period
                    Stop      = new Time(20),                 // it ends inside the period
                }
            });
            // Subcats & Tags
            timelineVM.FullTimeline.ElementAt(1).Model.Tags.Add(badTag);
            timelineVM.FullTimeline.ElementAt(1).Model.Tags.Add(commonTagsByGroup [""].First());
            timelineVM.FullTimeline.ElementAt(2).Model.Tags.Add(goodTag);
            timelineVM.FullTimeline.ElementAt(2).Model.Tags.Add(commonTagsByGroup [""].ElementAt(1));
            timelineVM.FullTimeline.ElementAt(3).Model.Tags.Add(badTag);
            timelineVM.FullTimeline.ElementAt(3).Model.Tags.Add(leftTag);
            timelineVM.FullTimeline.ElementAt(3).Model.Tags.Add(commonTagsByGroup [""].First());
            timelineVM.FullTimeline.ElementAt(3).Model.Tags.Add(commonTagsByGroup [""].ElementAt(1));
            timelineVM.FullTimeline.ElementAt(4).Model.Tags.Add(goodTag);
            timelineVM.FullTimeline.ElementAt(4).Model.Tags.Add(otherTag);
            timelineVM.FullTimeline.ElementAt(5).Model.Tags.Add(badTag);
            timelineVM.FullTimeline.ElementAt(7).Model.Tags.Add(otherTag);
        }