public void Update() { events = project.EventsByType(eventType).Where(filter.IsVisible).ToList(); homeEvents = events.Where(e => project.EventTaggedTeam(e) == TeamType.LOCAL).ToList(); awayEvents = events.Where(e => project.EventTaggedTeam(e) == TeamType.VISITOR).ToList(); TotalCount = events.Count; LocalTeamCount = homeEvents.Count; VisitorTeamCount = awayEvents.Count; SubcategoriesStats = new List <SubCategoryStat> (); if (eventType is AnalysisEventType) { var tagsByGroup = (eventType as AnalysisEventType).TagsByGroup; foreach (string grp in tagsByGroup.Keys) { SubCategoryStat substat = new SubCategoryStat(grp); foreach (Tag t in tagsByGroup[grp]) { int count, localTeamCount, visitorTeamCount; count = events.Count(e => e.Tags.Contains(t)); localTeamCount = homeEvents.Count(e => e.Tags.Contains(t)); visitorTeamCount = awayEvents.Count(e => e.Tags.Contains(t)); PercentualStat pStat = new PercentualStat(t.Value, count, localTeamCount, visitorTeamCount, events.Count); substat.OptionStats.Add(pStat); } SubcategoriesStats.Add(substat); } } }
public void LoadStats(SubCategoryStat stats) { store = new ListStore (typeof(string), typeof(string)); treeview.Model = store; gtkframe.Markup = String.Format ("<b> {0} </b>", stats.Name); plotter1.LoadHistogram (stats); foreach (PercentualStat st in stats.OptionStats) { store.AppendValues (st.Name, st.TotalCount.ToString ()); } }
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); } } }
public void LoadStats(SubCategoryStat stats, string homeName, string awayName) { store = new ListStore(typeof(string), typeof(string), typeof(string), typeof(string)); treeview.Model = store; treeview.Columns[2].Title = homeName; treeview.Columns[3].Title = awayName; plotter.HomeName = homeName; plotter.AwayName = awayName; gtkframe.Markup = String.Format("<b> {0} </b>", stats.Name); plotter.LoadHistogram (stats); foreach (PercentualStat st in stats.OptionStats) { store.AppendValues (st.Name, st.TotalCount.ToString(), st.LocalTeamCount.ToString(), st.VisitorTeamCount.ToString()); } }
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); } } }
void CreateGroupStats(Dictionary <string, List <Tag> > tagsByGroup, bool forceInclude = true) { foreach (string grp in tagsByGroup.Keys) { bool hasData = false; SubCategoryStat substat = new SubCategoryStat(grp); foreach (Tag t in tagsByGroup[grp]) { int count, localTeamCount, visitorTeamCount; count = events.Count(e => e.Tags.Contains(t)); localTeamCount = homeEvents.Count(e => e.Tags.Contains(t)); visitorTeamCount = awayEvents.Count(e => e.Tags.Contains(t)); PercentualStat pStat = new PercentualStat(t.Value, count, localTeamCount, visitorTeamCount, TotalCount); substat.OptionStats.Add(pStat); hasData |= count > 0; } if (forceInclude || hasData) { SubcategoriesStats.Add(substat); } } }
public void Update() { List <TimelineEvent> originalEventsByType = project.EventsByType(eventType); var eventsByType = new List <LMTimelineEvent> (); foreach (var eventType in originalEventsByType) { eventsByType.Add(eventType as LMTimelineEvent); } events = eventsByType.Where(filter.IsVisible).ToList(); homeEvents = events.Where(e => e.Teams.Contains(project.LocalTeamTemplate) || e.Players.Intersect(project.LocalTeamTemplate.List).Any()).ToList(); awayEvents = events.Where(e => e.Teams.Contains(project.VisitorTeamTemplate) || e.Players.Intersect(project.VisitorTeamTemplate.List).Any()).ToList(); TotalCount = events.Count; LocalTeamCount = homeEvents.Count; VisitorTeamCount = awayEvents.Count; SubcategoriesStats = new List <SubCategoryStat> (); if (eventType is AnalysisEventType) { var tagsByGroup = (eventType as AnalysisEventType).TagsByGroup; foreach (string grp in tagsByGroup.Keys) { SubCategoryStat substat = new SubCategoryStat(grp); foreach (Tag t in tagsByGroup[grp]) { int count, localTeamCount, visitorTeamCount; count = events.Count(e => e.Tags.Contains(t)); localTeamCount = homeEvents.Count(e => e.Tags.Contains(t)); visitorTeamCount = awayEvents.Count(e => e.Tags.Contains(t)); PercentualStat pStat = new PercentualStat(t.Value, count, localTeamCount, visitorTeamCount, TotalCount); substat.OptionStats.Add(pStat); } SubcategoriesStats.Add(substat); } } }
PlotModel GetPie(SubCategoryStat stats, TeamType team) { PlotModel model = new PlotModel (); PieSeries ps = new PieSeries (); foreach (PercentualStat st in stats.OptionStats) { double count = GetCount (st, team); if (count == 0) continue; ps.Slices.Add (new PieSlice (st.Name, count)); } ps.InnerDiameter = 0; ps.ExplodedDistance = 0.0; ps.Stroke = OxyColors.White; ps.StrokeThickness = 2.0; ps.InsideLabelPosition = 0.8; ps.AngleSpan = 360; ps.StartAngle = 0; if (team == TeamType.LOCAL) { ps.Title = HomeName; } else if (team == TeamType.VISITOR) { ps.Title = AwayName; } OxyColor text_color = OxyColor.FromArgb (LongoMatch.App.Current.Style.PaletteText.A, LongoMatch.App.Current.Style.PaletteText.R, LongoMatch.App.Current.Style.PaletteText.G, LongoMatch.App.Current.Style.PaletteText.B); model.TextColor = text_color; model.TitleColor = text_color; model.SubtitleColor = text_color; model.Series.Add (ps); return model; }
PlotModel GetHistogram(SubCategoryStat stats) { PlotModel model = new PlotModel (); CategoryAxis categoryAxis; LinearAxis valueAxis; int maxCount; valueAxis = new LinearAxis { Position = AxisPosition.Left, MinimumPadding = 0, AbsoluteMinimum = 0, MinorStep = 1, MajorStep = 1, Minimum = 0 }; categoryAxis = new CategoryAxis () { ItemsSource = stats.OptionStats, LabelField = "Name", Angle = 20.0 }; model.Series.Add (new ColumnSeries { Title = Catalog.GetString ("Total"), ItemsSource = stats.OptionStats, ValueField = "TotalCount" }); if (ShowTeams) { model.Series.Add (new ColumnSeries { Title = HomeName, ItemsSource = stats.OptionStats, ValueField = "LocalTeamCount", FillColor = OxyColor.FromArgb (0xFF, 0xFF, 0x33, 0x0), }); model.Series.Add (new ColumnSeries { Title = AwayName, ItemsSource = stats.OptionStats, ValueField = "VisitorTeamCount", FillColor = OxyColor.FromArgb (0xFF, 0, 0x99, 0xFF) }); } model.Axes.Add (categoryAxis); model.Axes.Add (valueAxis); if (stats.OptionStats.Count != 0) { maxCount = stats.OptionStats.Max (o => o.TotalCount); if (maxCount > 10 && maxCount <= 50) { valueAxis.MinorStep = 5; valueAxis.MajorStep = 10; } else if (maxCount > 50 && maxCount <= 100) { valueAxis.MinorStep = 10; valueAxis.MajorStep = 20; } else if (maxCount > 100) { valueAxis.MinorStep = 10; valueAxis.MajorStep = 50; } } OxyColor text_color = OxyColor.FromArgb (LongoMatch.App.Current.Style.PaletteText.A, LongoMatch.App.Current.Style.PaletteText.R, LongoMatch.App.Current.Style.PaletteText.G, LongoMatch.App.Current.Style.PaletteText.B); model.TextColor = text_color; model.TitleColor = text_color; model.SubtitleColor = text_color; return model; }
public void LoadPie(SubCategoryStat stats) { graphType = GraphType.Pie; this.stats = stats; Reload (); }
public void LoadHistogram(SubCategoryStat stats) { graphType = GraphType.Histogram; this.stats = stats; Reload (); }
public void Update() { events = project.EventsByType (eventType).Where (filter.IsVisible).ToList (); homeEvents = events.Where (e => project.EventTaggedTeam (e) == TeamType.LOCAL).ToList (); awayEvents = events.Where (e => project.EventTaggedTeam (e) == TeamType.VISITOR).ToList (); TotalCount = events.Count; LocalTeamCount = homeEvents.Count; VisitorTeamCount = awayEvents.Count; SubcategoriesStats = new List<SubCategoryStat> (); if (eventType is AnalysisEventType) { var tagsByGroup = (eventType as AnalysisEventType).TagsByGroup; foreach (string grp in tagsByGroup.Keys) { SubCategoryStat substat = new SubCategoryStat (grp); foreach (Tag t in tagsByGroup[grp]) { int count, localTeamCount, visitorTeamCount; count = events.Count (e => e.Tags.Contains (t)); localTeamCount = homeEvents.Count (e => e.Tags.Contains (t)); visitorTeamCount = awayEvents.Count (e => e.Tags.Contains (t)); PercentualStat pStat = new PercentualStat (t.Value, count, localTeamCount, visitorTeamCount, events.Count); substat.OptionStats.Add (pStat); } SubcategoriesStats.Add (substat); } } }
public void Update() { events = filter.VisiblePlays.Where (e => ((TimelineEventLongoMatch)e).Players.Contains (player) && e.EventType.Equals (EventType)).Cast<TimelineEventLongoMatch> ().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); } } }
public void Update() { List<TimelineEvent> originalEventsByType = project.EventsByType (eventType); var eventsByType = new List<TimelineEventLongoMatch> (); foreach (var eventType in originalEventsByType) { eventsByType.Add (eventType as TimelineEventLongoMatch); } events = eventsByType.Where (filter.IsVisible).ToList (); homeEvents = events.Where (e => e.Teams.Contains (project.LocalTeamTemplate) || e.Players.Intersect (project.LocalTeamTemplate.List).Any ()).ToList (); awayEvents = events.Where (e => e.Teams.Contains (project.VisitorTeamTemplate) || e.Players.Intersect (project.VisitorTeamTemplate.List).Any ()).ToList (); TotalCount = events.Count; LocalTeamCount = homeEvents.Count; VisitorTeamCount = awayEvents.Count; SubcategoriesStats = new List<SubCategoryStat> (); if (eventType is AnalysisEventType) { var tagsByGroup = (eventType as AnalysisEventType).TagsByGroup; foreach (string grp in tagsByGroup.Keys) { SubCategoryStat substat = new SubCategoryStat (grp); foreach (Tag t in tagsByGroup[grp]) { int count, localTeamCount, visitorTeamCount; count = events.Count (e => e.Tags.Contains (t)); localTeamCount = homeEvents.Count (e => e.Tags.Contains (t)); visitorTeamCount = awayEvents.Count (e => e.Tags.Contains (t)); PercentualStat pStat = new PercentualStat (t.Value, count, localTeamCount, visitorTeamCount, TotalCount); substat.OptionStats.Add (pStat); } SubcategoriesStats.Add (substat); } } }
void AddSubcategory(SubCategoryStat sstats, EventTypeStats parent) { foreach (PercentualStat ostats in sstats.OptionStats) { StatsWidget w = new StatsWidget (ostats, parent, sstats, subcatsMaxSize); subcats.Add (w); cstatsbox.PackStart (w, false, true, 0); } }
public StatsWidget(Stat stat, Stat category, SubCategoryStat subcat, int textSize) { /* For subcategories, parent is the parent Category */ this.stat = stat; this.category = category; HomeColor = CairoUtils.ColorFromRGB (0xFF, 0x33, 0); AwayColor = CairoUtils.ColorFromRGB (0, 0x99, 0xFF); layout = new Pango.Layout (PangoContext); layout.Wrap = Pango.WrapMode.Char; layout.Alignment = Pango.Alignment.Center; ModifyText (StateType.Normal, Helpers.Misc.ToGdkColor (App.Current.Style.PaletteText)); this.textSize = textSize; name_tpl = "{0}"; count_tpl = "{0} ({1}%)"; if (category == null) { name_tpl = "<b>" + name_tpl + "</b>"; count_tpl = "<b>" + count_tpl + "</b>"; HeightRequest = 25; } else { if (subcat != null) { name_tpl = GLib.Markup.EscapeText (subcat.Name); name_tpl += name_tpl == "" ? "{0}" : ": {0}"; } HeightRequest = 18; } }