コード例 #1
0
ファイル: EventTypeStats.cs プロジェクト: kuggaa/longomatch
 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);
         }
     }
 }
コード例 #2
0
        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 ());
            }
        }
コード例 #3
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);
				}
			}
			
		}
コード例 #4
0
ファイル: SubcategoryViewer.cs プロジェクト: GNOME/longomatch
        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());
            }
        }
コード例 #5
0
        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);
                }
            }
        }
コード例 #6
0
 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);
         }
     }
 }
コード例 #7
0
        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);
                }
            }
        }
コード例 #8
0
ファイル: Plotter.cs プロジェクト: LongoMatch/longomatch
        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;
        }
コード例 #9
0
ファイル: Plotter.cs プロジェクト: LongoMatch/longomatch
        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;
        }
コード例 #10
0
ファイル: Plotter.cs プロジェクト: LongoMatch/longomatch
 public void LoadPie(SubCategoryStat stats)
 {
     graphType = GraphType.Pie;
     this.stats = stats;
     Reload ();
 }
コード例 #11
0
ファイル: Plotter.cs プロジェクト: LongoMatch/longomatch
 public void LoadHistogram(SubCategoryStat stats)
 {
     graphType = GraphType.Histogram;
     this.stats = stats;
     Reload ();
 }
コード例 #12
0
ファイル: EventTypeStats.cs プロジェクト: GNOME/longomatch
 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);
         }
     }
 }
コード例 #13
0
        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);
                }
            }
        }
コード例 #14
0
 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);
         }
     }
 }
コード例 #15
0
ファイル: GameViewer.cs プロジェクト: LongoMatch/longomatch
 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);
     }
 }
コード例 #16
0
ファイル: GameViewer.cs プロジェクト: LongoMatch/longomatch
 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;
     }
 }