public StatisticsSection(ImageProvider imageProvider, ILogNameProvider nameProvider) { specializations = new SpecializationStatistics(imageProvider); encounters = new EncounterStatistics(nameProvider); var tabs = new TabControl(); tabs.Pages.Add(new TabPage { Text = "Encounters", Content = encounters, Padding = new Padding(10) }); tabs.Pages.Add(new TabPage { Text = "Specializations", Content = specializations, Padding = new Padding(10) }); Content = tabs; }
public GameDataCollecting(LogList logList, LogCache logCache, ApiData apiData, LogDataProcessor logProcessor, UploadProcessor uploadProcessor, ImageProvider imageProvider, ILogNameProvider nameProvider) { var gatherButton = new Button { Text = "Collect data" }; var cancelButton = new Button { Text = "Cancel" }; var exportSpeciesButton = new Button { Text = "Export species data to csv" }; var exportSkillsButton = new Button { Text = "Export skill data to csv" }; var progressBar = new ProgressBar(); var progressLabel = new Label { Text = "" }; var speciesGridView = new GridView <SpeciesData>(); var skillGridView = new GridView <SkillData>(); var dataTabs = new TabControl(); dataTabs.Pages.Add(new TabPage { Text = "Species", Content = speciesGridView }); dataTabs.Pages.Add(new TabPage { Text = "Skills", Content = skillGridView }); BeginVertical(new Padding(5), new Size(5, 5)); { AddCentered( "Collects a list of all different agent species and skills found in logs (uses current filters)."); AddCentered("Requires all logs to be processed again as this data is not cached."); BeginCentered(spacing: new Size(5, 5)); { AddRow(gatherButton, cancelButton); } EndCentered(); BeginCentered(spacing: new Size(5, 5)); { AddRow(progressBar); AddRow(progressLabel); } EndCentered(); BeginHorizontal(true); Add(dataTabs); EndHorizontal(); BeginCentered(spacing: new Size(5, 5)); { AddRow(exportSpeciesButton, exportSkillsButton); } EndCentered(); } EndVertical(); speciesGridView.Columns.Add(new GridColumn { HeaderText = "Species ID", DataCell = new TextBoxCell() { Binding = new DelegateBinding <SpeciesData, string>(x => x.SpeciesId.ToString()) } }); speciesGridView.Columns.Add(new GridColumn { HeaderText = "Name", DataCell = new TextBoxCell() { Binding = new DelegateBinding <SpeciesData, string>(x => x.Name) } }); speciesGridView.Columns.Add(new GridColumn { HeaderText = "Times seen", DataCell = new TextBoxCell() { Binding = new DelegateBinding <SpeciesData, string>(x => x.Logs.Count.ToString()) } }); var speciesLogsColumn = new GridColumn { HeaderText = "Logs", DataCell = new TextBoxCell() { Binding = new DelegateBinding <SpeciesData, string>(x => "Click me to open log list"), } }; speciesGridView.Columns.Add(speciesLogsColumn); speciesGridView.CellClick += (sender, args) => { if (args.GridColumn == speciesLogsColumn) { if (args.Item is SpeciesData speciesData) { var form = new Form { Content = new LogList(logCache, apiData, logProcessor, uploadProcessor, imageProvider, nameProvider) { DataStore = new FilterCollection <LogData>(speciesData.Logs) }, Width = 900, Height = 700, Title = $"arcdps Log Manager: logs containing species {speciesData.Name} (ID {speciesData.SpeciesId})" }; form.Show(); } } }; skillGridView.Columns.Add(new GridColumn { HeaderText = "Skill ID", DataCell = new TextBoxCell() { Binding = new DelegateBinding <SkillData, string>(x => x.SkillId.ToString()) } }); skillGridView.Columns.Add(new GridColumn { HeaderText = "Name", DataCell = new TextBoxCell() { Binding = new DelegateBinding <SkillData, string>(x => x.Name) } }); skillGridView.Columns.Add(new GridColumn { HeaderText = "Times seen", DataCell = new TextBoxCell() { Binding = new DelegateBinding <SkillData, string>(x => x.Logs.Count.ToString()) } }); var skillLogsColumn = new GridColumn { HeaderText = "Logs", DataCell = new TextBoxCell() { Binding = new DelegateBinding <SkillData, string>(x => "Click me to open log list"), } }; skillGridView.Columns.Add(skillLogsColumn); skillGridView.CellClick += (sender, args) => { if (args.GridColumn == skillLogsColumn) { if (args.Item is SkillData skillData) { var form = new Form { Content = new LogList(logCache, apiData, logProcessor, uploadProcessor, imageProvider, nameProvider) { DataStore = new FilterCollection <LogData>(skillData.Logs) }, Width = 900, Height = 700, Title = $"arcdps Log Manager: logs containing skill {skillData.Name} (ID {skillData.SkillId})" }; form.Show(); } } }; var speciesSorter = new GridViewSorter <SpeciesData>(speciesGridView); var skillSorter = new GridViewSorter <SkillData>(skillGridView); speciesSorter.EnableSorting(); skillSorter.EnableSorting(); cancelButton.Click += (sender, args) => cancellationTokenSource?.Cancel(); gatherButton.Click += (sender, args) => GatherData(logList, progressBar, progressLabel, speciesGridView, skillGridView, speciesSorter, skillSorter); exportSkillsButton.Click += (sender, args) => SaveToCsv(skillGridView.DataStore ?? Enumerable.Empty <SkillData>()); exportSpeciesButton.Click += (sender, args) => SaveToCsv(speciesGridView.DataStore ?? Enumerable.Empty <SpeciesData>()); }
public LogFilters(ILogNameProvider nameProvider, params ILogFilter[] additionalFilters) { this.nameProvider = nameProvider; this.additionalFilters = additionalFilters; }
public LogFilterPanel(ImageProvider imageProvider, ILogNameProvider logNameProvider, LogFilters filters) { this.logNameProvider = logNameProvider; Filters = filters; encounterFilterDropDown = new DropDown { SelectedKey = LogFilters.EncounterFilterAll }; encounterFilterDropDown.SelectedKeyBinding.Bind(this, x => x.Filters.EncounterFilter); var successCheckBox = new CheckBox { Text = "Success" }; successCheckBox.CheckedBinding.Bind(this, x => x.Filters.ShowSuccessfulLogs); var failureCheckBox = new CheckBox { Text = "Failure" }; failureCheckBox.CheckedBinding.Bind(this, x => x.Filters.ShowFailedLogs); var unknownCheckBox = new CheckBox { Text = "Unknown" }; unknownCheckBox.CheckedBinding.Bind(this, x => x.Filters.ShowUnknownLogs); var normalModeCheckBox = new CheckBox { Text = "Normal" }; normalModeCheckBox.CheckedBinding.Bind(this, x => x.Filters.ShowNormalModeLogs); var challengeModeCheckBox = new CheckBox { Text = "CM" }; challengeModeCheckBox.CheckedBinding.Bind(this, x => x.Filters.ShowChallengeModeLogs); var startDateTimePicker = new DateTimePicker { Mode = DateTimePickerMode.DateTime }; startDateTimePicker.ValueBinding.Bind(this, x => x.Filters.MinDateTimeFilter); var endDateTimePicker = new DateTimePicker { Mode = DateTimePickerMode.DateTime }; endDateTimePicker.ValueBinding.Bind(this, x => x.Filters.MaxDateTimeFilter); var lastDayButton = new Button { Text = "Last day" }; lastDayButton.Click += (sender, args) => { startDateTimePicker.Value = DateTime.Now - TimeSpan.FromDays(1); endDateTimePicker.Value = DateTime.Now.Date.AddDays(1); }; var allTimeButton = new Button { Text = "All time" }; allTimeButton.Click += (sender, args) => { startDateTimePicker.Value = LogFilters.GuildWars2ReleaseDate; endDateTimePicker.Value = DateTime.Now.Date.AddDays(1); }; var advancedFiltersButton = new Button { Text = "Advanced" }; advancedFiltersButton.Click += (sender, args) => { var form = new Form { Title = "Advanced filters - arcdps Log Manager", Content = new AdvancedFilterPanel(imageProvider, filters) }; form.Show(); }; var applyFilterButton = new Button { Text = "Apply" }; applyFilterButton.Click += (sender, args) => { OnFiltersUpdated(); }; BeginGroup("Filters", new Padding(5, 0, 5, 5)); { BeginHorizontal(); { BeginVertical(); { BeginVertical(spacing: new Size(4, 0)); { BeginHorizontal(); { BeginGroup("Encounter"); { Add(encounterFilterDropDown); } EndGroup(); BeginGroup("Result", new Padding(4, 0, 4, 2), spacing: new Size(4, 0)); { BeginHorizontal(); { Add(successCheckBox); Add(failureCheckBox); Add(unknownCheckBox); } EndHorizontal(); } EndGroup(); BeginGroup("Mode", new Padding(4, 0, 4, 2), spacing: new Size(4, 0)); { BeginHorizontal(); { Add(normalModeCheckBox); Add(challengeModeCheckBox); } EndHorizontal(); } EndGroup(); Add(null); } EndHorizontal(); } EndBeginVertical(spacing: new Size(4, 0)); { BeginGroup("Time", new Padding(4, 0, 4, 2), spacing: new Size(4, 0)); { BeginHorizontal(); { Add(new Label { Text = "Between", VerticalAlignment = VerticalAlignment.Center }); Add(startDateTimePicker); Add(new Label { Text = "and", VerticalAlignment = VerticalAlignment.Center }); Add(endDateTimePicker); Add(lastDayButton); Add(allTimeButton); } EndHorizontal(); } EndGroup(); Add(null); } EndVertical(); } EndVertical(); Add(null, true); BeginVertical(new Padding(5), new Size(0, 5)); { Add(advancedFiltersButton); Add(null, true); Add(applyFilterButton); } EndVertical(); } EndHorizontal(); } EndGroup(); }