The Doink
Real Name: Scott
Join Date: Nov 2002
Location: Portland, OR
Posts: 20,335
Car: '09 OBXT, '02 WRX, '96 Miata
Class: PDX/TT-6
The way out is through
|
Yeah, results software is trivial.
Code:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
namespace SeasonManager
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class MainForm : System.Windows.Forms.Form
{
private System.Windows.Forms.MainMenu MainMenu;
private System.Windows.Forms.MenuItem FileMenu;
private System.Windows.Forms.MenuItem OpenMenu;
private System.Windows.Forms.MenuItem SaveMenu;
private System.Windows.Forms.MenuItem SaveAsMenu;
private System.Windows.Forms.MenuItem CloseMenu;
private System.Windows.Forms.MenuItem SeperatorMenu;
private System.Windows.Forms.MenuItem ExitMenu;
private System.Windows.Forms.MenuItem ReportsMenu;
private System.Windows.Forms.StatusBar StatusBar;
private System.Windows.Forms.StatusBarPanel StatusPanel;
private System.Windows.Forms.Timer StatusTimer;
private System.ComponentModel.IContainer components;
private System.Windows.Forms.OpenFileDialog OpenFile;
private System.Windows.Forms.SaveFileDialog SaveFile;
private System.Windows.Forms.MenuItem NewMenu;
private System.Windows.Forms.StatusBarPanel FilenamePanel;
private System.Windows.Forms.StatusBarPanel ModifiedPanel;
private System.Windows.Forms.TabControl TabControl;
private System.Windows.Forms.TabPage SettingsPage;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox ClassPointsText;
private System.Windows.Forms.TextBox PaxPointsText;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.NumericUpDown EventCountUpDn;
private System.Windows.Forms.NumericUpDown ReqEventCountUpDn;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.NumericUpDown DropCountUpDn;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TabPage EventsPage;
private System.Windows.Forms.GroupBox EventDetailsGroup;
private System.Windows.Forms.Button DeleteEventButton;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.VScrollBar EventMover;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.GroupBox EventActionsGroup;
private System.Windows.Forms.Button SyncSingleEvent;
private System.Windows.Forms.Button SyncAllEvents;
private System.Windows.Forms.ColumnHeader DriverCol;
private System.Windows.Forms.ColumnHeader ClassCol;
private System.Windows.Forms.ColumnHeader CarCol;
private System.Windows.Forms.GroupBox ClassDetailsGroup;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.ListBox ClassList;
private System.Windows.Forms.Label label14;
private System.Windows.Forms.Button DeleteClassButton;
private System.Windows.Forms.TextBox ClassDescText;
private System.Windows.Forms.TextBox ClassIdText;
private System.Windows.Forms.GroupBox ClassActionsGroup;
private System.Windows.Forms.Button AddClassButton;
private System.Windows.Forms.CheckBox ClassNonPointsCheck;
private System.Windows.Forms.Button ApplyClassButton;
private System.Windows.Forms.ListBox EventList;
private System.Windows.Forms.TextBox EventFilenameText;
private System.Windows.Forms.TextBox EventDateText;
private System.Windows.Forms.TextBox EventNameText;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.TextBox SeasonNameText;
private System.Windows.Forms.TextBox ClubNameText;
private System.Windows.Forms.MenuItem ClassReportMenu;
private System.Windows.Forms.TabPage ClassPointsPage;
private System.Windows.Forms.TabPage PaxPointsPage;
private System.Windows.Forms.MenuItem PaxReportMenu;
private System.Windows.Forms.ColumnHeader ClassPointsCol;
private System.Windows.Forms.CheckBox ClassLadiesCheck;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.Label label16;
private System.Windows.Forms.TextBox SingleEntrantClassPointsText;
private System.Windows.Forms.TextBox SingleEntrantPaxPointsText;
private System.Windows.Forms.ListView ClassStandingsList;
private System.Windows.Forms.ListView PaxStandingsList;
private System.Windows.Forms.ColumnHeader PaxClassCol;
private System.Windows.Forms.ColumnHeader PaxDriverCol;
private System.Windows.Forms.ColumnHeader PaxCarCol;
private System.Windows.Forms.ColumnHeader PaxPointsCol;
private System.Windows.Forms.SaveFileDialog SaveReport;
private System.Windows.Forms.MenuItem PerfectAttendanceMenu;
private System.Windows.Forms.MenuItem menuItem1;
private System.Windows.Forms.MenuItem menuItem2;
private System.Windows.Forms.MenuItem ExcludeMenu;
private System.Windows.Forms.Button GenerateEventReportButton;
private System.Windows.Forms.MenuItem menuItem5;
private System.Windows.Forms.MenuItem EventReportMenu;
private System.Windows.Forms.MenuItem GenerateAllEventReportsMenu;
public SeasonWrapper season_data = null;
public MainForm()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
Utils.WriteToFlatLog(Utils.EXCEPTION_LOG, "Application started...", true, false);
ClassStandingsList.ListViewItemSorter = new StandingsListSorter();
PaxStandingsList.ListViewItemSorter = new StandingsListSorter();
UpdateDisplay();
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.MainMenu = new System.Windows.Forms.MainMenu();
this.FileMenu = new System.Windows.Forms.MenuItem();
this.NewMenu = new System.Windows.Forms.MenuItem();
this.OpenMenu = new System.Windows.Forms.MenuItem();
this.SaveMenu = new System.Windows.Forms.MenuItem();
this.SaveAsMenu = new System.Windows.Forms.MenuItem();
this.CloseMenu = new System.Windows.Forms.MenuItem();
this.SeperatorMenu = new System.Windows.Forms.MenuItem();
this.ExitMenu = new System.Windows.Forms.MenuItem();
this.ReportsMenu = new System.Windows.Forms.MenuItem();
this.EventReportMenu = new System.Windows.Forms.MenuItem();
this.GenerateAllEventReportsMenu = new System.Windows.Forms.MenuItem();
this.menuItem5 = new System.Windows.Forms.MenuItem();
this.ClassReportMenu = new System.Windows.Forms.MenuItem();
this.PaxReportMenu = new System.Windows.Forms.MenuItem();
this.PerfectAttendanceMenu = new System.Windows.Forms.MenuItem();
this.menuItem1 = new System.Windows.Forms.MenuItem();
this.menuItem2 = new System.Windows.Forms.MenuItem();
this.ExcludeMenu = new System.Windows.Forms.MenuItem();
this.StatusBar = new System.Windows.Forms.StatusBar();
this.StatusPanel = new System.Windows.Forms.StatusBarPanel();
this.FilenamePanel = new System.Windows.Forms.StatusBarPanel();
this.ModifiedPanel = new System.Windows.Forms.StatusBarPanel();
this.StatusTimer = new System.Windows.Forms.Timer(this.components);
this.OpenFile = new System.Windows.Forms.OpenFileDialog();
this.SaveFile = new System.Windows.Forms.SaveFileDialog();
this.TabControl = new System.Windows.Forms.TabControl();
this.SettingsPage = new System.Windows.Forms.TabPage();
this.SingleEntrantPaxPointsText = new System.Windows.Forms.TextBox();
this.label16 = new System.Windows.Forms.Label();
this.SingleEntrantClassPointsText = new System.Windows.Forms.TextBox();
this.label15 = new System.Windows.Forms.Label();
this.ClubNameText = new System.Windows.Forms.TextBox();
this.label11 = new System.Windows.Forms.Label();
this.SeasonNameText = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.ClassActionsGroup = new System.Windows.Forms.GroupBox();
this.AddClassButton = new System.Windows.Forms.Button();
this.label14 = new System.Windows.Forms.Label();
this.ClassDetailsGroup = new System.Windows.Forms.GroupBox();
this.ClassLadiesCheck = new System.Windows.Forms.CheckBox();
this.ApplyClassButton = new System.Windows.Forms.Button();
this.ClassNonPointsCheck = new System.Windows.Forms.CheckBox();
this.DeleteClassButton = new System.Windows.Forms.Button();
this.ClassDescText = new System.Windows.Forms.TextBox();
this.label12 = new System.Windows.Forms.Label();
this.ClassIdText = new System.Windows.Forms.TextBox();
this.label13 = new System.Windows.Forms.Label();
this.ClassList = new System.Windows.Forms.ListBox();
this.DropCountUpDn = new System.Windows.Forms.NumericUpDown();
this.label5 = new System.Windows.Forms.Label();
this.ReqEventCountUpDn = new System.Windows.Forms.NumericUpDown();
this.label4 = new System.Windows.Forms.Label();
this.EventCountUpDn = new System.Windows.Forms.NumericUpDown();
this.label3 = new System.Windows.Forms.Label();
this.PaxPointsText = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.ClassPointsText = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.EventsPage = new System.Windows.Forms.TabPage();
this.EventActionsGroup = new System.Windows.Forms.GroupBox();
this.GenerateEventReportButton = new System.Windows.Forms.Button();
this.SyncAllEvents = new System.Windows.Forms.Button();
this.SyncSingleEvent = new System.Windows.Forms.Button();
this.EventDetailsGroup = new System.Windows.Forms.GroupBox();
this.DeleteEventButton = new System.Windows.Forms.Button();
this.label10 = new System.Windows.Forms.Label();
this.EventMover = new System.Windows.Forms.VScrollBar();
this.EventFilenameText = new System.Windows.Forms.TextBox();
this.label9 = new System.Windows.Forms.Label();
this.EventDateText = new System.Windows.Forms.TextBox();
this.label8 = new System.Windows.Forms.Label();
this.EventNameText = new System.Windows.Forms.TextBox();
this.label7 = new System.Windows.Forms.Label();
this.EventList = new System.Windows.Forms.ListBox();
this.ClassPointsPage = new System.Windows.Forms.TabPage();
this.ClassStandingsList = new System.Windows.Forms.ListView();
this.ClassCol = new System.Windows.Forms.ColumnHeader();
this.DriverCol = new System.Windows.Forms.ColumnHeader();
this.CarCol = new System.Windows.Forms.ColumnHeader();
this.ClassPointsCol = new System.Windows.Forms.ColumnHeader();
this.PaxPointsPage = new System.Windows.Forms.TabPage();
this.PaxStandingsList = new System.Windows.Forms.ListView();
this.PaxClassCol = new System.Windows.Forms.ColumnHeader();
this.PaxDriverCol = new System.Windows.Forms.ColumnHeader();
this.PaxCarCol = new System.Windows.Forms.ColumnHeader();
this.PaxPointsCol = new System.Windows.Forms.ColumnHeader();
this.SaveReport = new System.Windows.Forms.SaveFileDialog();
((System.ComponentModel.ISupportInitialize)(this.StatusPanel)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.FilenamePanel)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.ModifiedPanel)).BeginInit();
this.TabControl.SuspendLayout();
this.SettingsPage.SuspendLayout();
this.ClassActionsGroup.SuspendLayout();
this.ClassDetailsGroup.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.DropCountUpDn)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.ReqEventCountUpDn)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.EventCountUpDn)).BeginInit();
this.EventsPage.SuspendLayout();
this.EventActionsGroup.SuspendLayout();
this.EventDetailsGroup.SuspendLayout();
this.ClassPointsPage.SuspendLayout();
this.PaxPointsPage.SuspendLayout();
this.SuspendLayout();
//
// MainMenu
//
this.MainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.FileMenu,
this.ReportsMenu});
//
// FileMenu
//
this.FileMenu.Index = 0;
this.FileMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.NewMenu,
this.OpenMenu,
this.SaveMenu,
this.SaveAsMenu,
this.CloseMenu,
this.SeperatorMenu,
this.ExitMenu});
this.FileMenu.Text = "&File";
//
// NewMenu
//
this.NewMenu.Index = 0;
this.NewMenu.Text = "&New";
this.NewMenu.Click += new System.EventHandler(this.NewMenu_Click);
//
// OpenMenu
//
this.OpenMenu.Index = 1;
this.OpenMenu.Text = "&Open...";
this.OpenMenu.Click += new System.EventHandler(this.OpenMenu_Click);
//
// SaveMenu
//
this.SaveMenu.Index = 2;
this.SaveMenu.Text = "&Save";
this.SaveMenu.Click += new System.EventHandler(this.SaveMenu_Click);
//
// SaveAsMenu
//
this.SaveAsMenu.Index = 3;
this.SaveAsMenu.Text = "Save &As...";
this.SaveAsMenu.Click += new System.EventHandler(this.SaveAsMenu_Click);
//
// CloseMenu
//
this.CloseMenu.Index = 4;
this.CloseMenu.Text = "&Close";
this.CloseMenu.Click += new System.EventHandler(this.CloseMenu_Click);
//
// SeperatorMenu
//
this.SeperatorMenu.Index = 5;
this.SeperatorMenu.Text = "-";
//
// ExitMenu
//
this.ExitMenu.Index = 6;
this.ExitMenu.Text = "E&xit";
this.ExitMenu.Click += new System.EventHandler(this.ExitMenu_Click);
//
// ReportsMenu
//
this.ReportsMenu.Index = 1;
this.ReportsMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.EventReportMenu,
this.ClassReportMenu,
this.PaxReportMenu,
this.PerfectAttendanceMenu,
this.menuItem1,
this.menuItem2});
this.ReportsMenu.Text = "&Reports";
//
// EventReportMenu
//
this.EventReportMenu.Index = 0;
this.EventReportMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.GenerateAllEventReportsMenu,
this.menuItem5});
this.EventReportMenu.Text = "&Event Reports";
this.EventReportMenu.Popup += new System.EventHandler(this.EventReportMenu_Popup);
//
// GenerateAllEventReportsMenu
//
this.GenerateAllEventReportsMenu.Index = 0;
this.GenerateAllEventReportsMenu.Text = "&All Events";
this.GenerateAllEventReportsMenu.Click += new System.EventHandler(this.GenerateAllEventReportsMenu_Click);
//
// menuItem5
//
this.menuItem5.Index = 1;
this.menuItem5.Text = "-";
//
// ClassReportMenu
//
this.ClassReportMenu.Index = 1;
this.ClassReportMenu.Text = "&Class Standings...";
this.ClassReportMenu.Click += new System.EventHandler(this.GenerateReport);
//
// PaxReportMenu
//
this.PaxReportMenu.Index = 2;
this.PaxReportMenu.Text = "&PAX Standings...";
this.PaxReportMenu.Click += new System.EventHandler(this.GenerateReport);
//
// PerfectAttendanceMenu
//
this.PerfectAttendanceMenu.Index = 3;
this.PerfectAttendanceMenu.Text = "Perfect &Attendance...";
this.PerfectAttendanceMenu.Click += new System.EventHandler(this.PerfectAttendanceMenu_Click);
//
// menuItem1
//
this.menuItem1.Index = 4;
this.menuItem1.Text = "-";
//
// menuItem2
//
this.menuItem2.Index = 5;
this.menuItem2.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.ExcludeMenu});
this.menuItem2.Text = "Report &Options";
//
// ExcludeMenu
//
this.ExcludeMenu.Checked = true;
this.ExcludeMenu.Index = 0;
this.ExcludeMenu.Text = "E&xclude non-Qualified Drivers";
this.ExcludeMenu.Click += new System.EventHandler(this.ExcludeMenu_Click);
//
// StatusBar
//
this.StatusBar.Location = new System.Drawing.Point(0, 449);
this.StatusBar.Name = "StatusBar";
this.StatusBar.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {
this.StatusPanel,
this.FilenamePanel,
this.ModifiedPanel});
this.StatusBar.ShowPanels = true;
this.StatusBar.Size = new System.Drawing.Size(864, 24);
this.StatusBar.TabIndex = 0;
//
// StatusPanel
//
this.StatusPanel.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Spring;
this.StatusPanel.Width = 680;
//
// FilenamePanel
//
this.FilenamePanel.Alignment = System.Windows.Forms.HorizontalAlignment.Center;
this.FilenamePanel.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Contents;
this.FilenamePanel.Text = "No season open";
this.FilenamePanel.Width = 96;
//
// ModifiedPanel
//
this.ModifiedPanel.Alignment = System.Windows.Forms.HorizontalAlignment.Center;
this.ModifiedPanel.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Contents;
this.ModifiedPanel.Text = "Unmodified";
this.ModifiedPanel.Width = 72;
//
// StatusTimer
//
this.StatusTimer.Interval = 8000;
this.StatusTimer.Tick += new System.EventHandler(this.StatusTimer_Tick);
//
// OpenFile
//
this.OpenFile.DefaultExt = "season";
this.OpenFile.Filter = "Season Files (*.season)|*.season|All File (*.*)|*.*";
this.OpenFile.Title = "Open Season File";
//
// SaveFile
//
this.SaveFile.DefaultExt = "season";
this.SaveFile.Filter = "Season Files (*.season)|*.season|All File (*.*)|*.*";
this.SaveFile.Title = "Save Season File";
//
// TabControl
//
this.TabControl.Controls.Add(this.SettingsPage);
this.TabControl.Controls.Add(this.EventsPage);
this.TabControl.Controls.Add(this.ClassPointsPage);
this.TabControl.Controls.Add(this.PaxPointsPage);
this.TabControl.Dock = System.Windows.Forms.DockStyle.Fill;
this.TabControl.Location = new System.Drawing.Point(0, 0);
this.TabControl.Name = "TabControl";
this.TabControl.SelectedIndex = 0;
this.TabControl.Size = new System.Drawing.Size(864, 449);
this.TabControl.TabIndex = 1;
//
// SettingsPage
//
this.SettingsPage.Controls.Add(this.SingleEntrantPaxPointsText);
this.SettingsPage.Controls.Add(this.label16);
this.SettingsPage.Controls.Add(this.SingleEntrantClassPointsText);
this.SettingsPage.Controls.Add(this.label15);
this.SettingsPage.Controls.Add(this.ClubNameText);
this.SettingsPage.Controls.Add(this.label11);
this.SettingsPage.Controls.Add(this.SeasonNameText);
this.SettingsPage.Controls.Add(this.label6);
this.SettingsPage.Controls.Add(this.ClassActionsGroup);
this.SettingsPage.Controls.Add(this.label14);
this.SettingsPage.Controls.Add(this.ClassDetailsGroup);
this.SettingsPage.Controls.Add(this.ClassList);
this.SettingsPage.Controls.Add(this.DropCountUpDn);
this.SettingsPage.Controls.Add(this.label5);
this.SettingsPage.Controls.Add(this.ReqEventCountUpDn);
this.SettingsPage.Controls.Add(this.label4);
this.SettingsPage.Controls.Add(this.EventCountUpDn);
this.SettingsPage.Controls.Add(this.label3);
this.SettingsPage.Controls.Add(this.PaxPointsText);
this.SettingsPage.Controls.Add(this.label2);
this.SettingsPage.Controls.Add(this.ClassPointsText);
this.SettingsPage.Controls.Add(this.label1);
this.SettingsPage.Location = new System.Drawing.Point(4, 22);
this.SettingsPage.Name = "SettingsPage";
this.SettingsPage.Size = new System.Drawing.Size(856, 423);
this.SettingsPage.TabIndex = 0;
this.SettingsPage.Text = "Settings";
//
// SingleEntrantPaxPointsText
//
this.SingleEntrantPaxPointsText.Location = new System.Drawing.Point(520, 80);
this.SingleEntrantPaxPointsText.Name = "SingleEntrantPaxPointsText";
this.SingleEntrantPaxPointsText.Size = new System.Drawing.Size(48, 20);
this.SingleEntrantPaxPointsText.TabIndex = 34;
this.SingleEntrantPaxPointsText.Text = "";
//
// label16
//
this.label16.Location = new System.Drawing.Point(392, 80);
this.label16.Name = "label16";
this.label16.Size = new System.Drawing.Size(120, 20);
this.label16.TabIndex = 33;
this.label16.Text = "Single Entrant Points:";
this.label16.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// SingleEntrantClassPointsText
//
this.SingleEntrantClassPointsText.Location = new System.Drawing.Point(520, 56);
this.SingleEntrantClassPointsText.Name = "SingleEntrantClassPointsText";
this.SingleEntrantClassPointsText.Size = new System.Drawing.Size(48, 20);
this.SingleEntrantClassPointsText.TabIndex = 32;
this.SingleEntrantClassPointsText.Text = "";
//
// label15
//
this.label15.Location = new System.Drawing.Point(392, 56);
this.label15.Name = "label15";
this.label15.Size = new System.Drawing.Size(120, 20);
this.label15.TabIndex = 31;
this.label15.Text = "Single Entrant Points:";
this.label15.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// ClubNameText
//
this.ClubNameText.Location = new System.Drawing.Point(144, 32);
this.ClubNameText.Name = "ClubNameText";
this.ClubNameText.Size = new System.Drawing.Size(248, 20);
this.ClubNameText.TabIndex = 30;
this.ClubNameText.Text = "";
//
// label11
//
this.label11.Location = new System.Drawing.Point(72, 32);
this.label11.Name = "label11";
this.label11.Size = new System.Drawing.Size(64, 20);
this.label11.TabIndex = 29;
this.label11.Text = "Club Name:";
this.label11.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// SeasonNameText
//
this.SeasonNameText.Location = new System.Drawing.Point(144, 8);
this.SeasonNameText.Name = "SeasonNameText";
this.SeasonNameText.Size = new System.Drawing.Size(248, 20);
this.SeasonNameText.TabIndex = 28;
this.SeasonNameText.Text = "";
//
// label6
//
this.label6.Location = new System.Drawing.Point(8, 8);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(128, 20);
this.label6.TabIndex = 27;
this.label6.Text = "Season Name:";
this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// ClassActionsGroup
//
this.ClassActionsGroup.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.ClassActionsGroup.Controls.Add(this.AddClassButton);
this.ClassActionsGroup.Location = new System.Drawing.Point(608, 280);
this.ClassActionsGroup.Name = "ClassActionsGroup";
this.ClassActionsGroup.Size = new System.Drawing.Size(232, 56);
this.ClassActionsGroup.TabIndex = 26;
this.ClassActionsGroup.TabStop = false;
this.ClassActionsGroup.Text = "Class Actions";
//
// AddClassButton
//
this.AddClassButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.AddClassButton.Enabled = false;
this.AddClassButton.Location = new System.Drawing.Point(16, 24);
this.AddClassButton.Name = "AddClassButton";
this.AddClassButton.Size = new System.Drawing.Size(88, 23);
this.AddClassButton.TabIndex = 20;
this.AddClassButton.Text = "Add Class";
//
// label14
//
this.label14.Location = new System.Drawing.Point(8, 128);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(128, 16);
this.label14.TabIndex = 25;
this.label14.Text = "Classes:";
this.label14.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// ClassDetailsGroup
//
this.ClassDetailsGroup.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.ClassDetailsGroup.Controls.Add(this.ClassLadiesCheck);
this.ClassDetailsGroup.Controls.Add(this.ApplyClassButton);
this.ClassDetailsGroup.Controls.Add(this.ClassNonPointsCheck);
this.ClassDetailsGroup.Controls.Add(this.DeleteClassButton);
this.ClassDetailsGroup.Controls.Add(this.ClassDescText);
this.ClassDetailsGroup.Controls.Add(this.label12);
this.ClassDetailsGroup.Controls.Add(this.ClassIdText);
this.ClassDetailsGroup.Controls.Add(this.label13);
this.ClassDetailsGroup.Enabled = false;
this.ClassDetailsGroup.Location = new System.Drawing.Point(608, 128);
this.ClassDetailsGroup.Name = "ClassDetailsGroup";
this.ClassDetailsGroup.Size = new System.Drawing.Size(232, 152);
this.ClassDetailsGroup.TabIndex = 24;
this.ClassDetailsGroup.TabStop = false;
this.ClassDetailsGroup.Text = "Selected Class Details";
//
// ClassLadiesCheck
//
this.ClassLadiesCheck.Location = new System.Drawing.Point(72, 64);
this.ClassLadiesCheck.Name = "ClassLadiesCheck";
this.ClassLadiesCheck.Size = new System.Drawing.Size(152, 20);
this.ClassLadiesCheck.TabIndex = 22;
this.ClassLadiesCheck.Text = "Ladies Class?";
this.ClassLadiesCheck.CheckedChanged += new System.EventHandler(this.ClassDetailsChanged);
//
// ApplyClassButton
//
this.ApplyClassButton.Location = new System.Drawing.Point(16, 120);
this.ApplyClassButton.Name = "ApplyClassButton";
this.ApplyClassButton.Size = new System.Drawing.Size(96, 23);
this.ApplyClassButton.TabIndex = 21;
this.ApplyClassButton.Text = "Apply Changes";
this.ApplyClassButton.Click += new System.EventHandler(this.ApplyClassButton_Click);
//
// ClassNonPointsCheck
//
this.ClassNonPointsCheck.Location = new System.Drawing.Point(72, 88);
this.ClassNonPointsCheck.Name = "ClassNonPointsCheck";
this.ClassNonPointsCheck.Size = new System.Drawing.Size(152, 20);
this.ClassNonPointsCheck.TabIndex = 20;
this.ClassNonPointsCheck.Text = "Non-Points Class?";
this.ClassNonPointsCheck.CheckedChanged += new System.EventHandler(this.ClassDetailsChanged);
//
// DeleteClassButton
//
this.DeleteClassButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.DeleteClassButton.Enabled = false;
this.DeleteClassButton.Location = new System.Drawing.Point(120, 120);
this.DeleteClassButton.Name = "DeleteClassButton";
this.DeleteClassButton.Size = new System.Drawing.Size(96, 23);
this.DeleteClassButton.TabIndex = 19;
this.DeleteClassButton.Text = "Delete Class";
//
// ClassDescText
//
this.ClassDescText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ClassDescText.Location = new System.Drawing.Point(72, 40);
this.ClassDescText.Name = "ClassDescText";
this.ClassDescText.Size = new System.Drawing.Size(152, 20);
this.ClassDescText.TabIndex = 5;
this.ClassDescText.Text = "";
this.ClassDescText.TextChanged += new System.EventHandler(this.ClassDetailsChanged);
//
// label12
//
this.label12.Location = new System.Drawing.Point(8, 40);
this.label12.Name = "label12";
this.label12.Size = new System.Drawing.Size(56, 20);
this.label12.TabIndex = 4;
this.label12.Text = "Desc:";
this.label12.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// ClassIdText
//
this.ClassIdText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ClassIdText.Location = new System.Drawing.Point(72, 16);
this.ClassIdText.Name = "ClassIdText";
this.ClassIdText.Size = new System.Drawing.Size(152, 20);
this.ClassIdText.TabIndex = 3;
this.ClassIdText.Text = "";
this.ClassIdText.TextChanged += new System.EventHandler(this.ClassDetailsChanged);
//
// label13
//
this.label13.Location = new System.Drawing.Point(8, 16);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(56, 20);
this.label13.TabIndex = 2;
this.label13.Text = "Class ID:";
this.label13.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// ClassList
//
this.ClassList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ClassList.IntegralHeight = false;
this.ClassList.Location = new System.Drawing.Point(144, 128);
this.ClassList.Name = "ClassList";
this.ClassList.Size = new System.Drawing.Size(456, 288);
this.ClassList.TabIndex = 23;
this.ClassList.SelectedIndexChanged += new System.EventHandler(this.ClassList_SelectedIndexChanged);
//
// DropCountUpDn
//
this.DropCountUpDn.Location = new System.Drawing.Point(520, 104);
this.DropCountUpDn.Name = "DropCountUpDn";
this.DropCountUpDn.Size = new System.Drawing.Size(48, 20);
this.DropCountUpDn.TabIndex = 9;
//
// label5
//
this.label5.Location = new System.Drawing.Point(376, 104);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(136, 20);
this.label5.TabIndex = 8;
this.label5.Text = "Number of Drops:";
this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// ReqEventCountUpDn
//
this.ReqEventCountUpDn.Location = new System.Drawing.Point(328, 104);
this.ReqEventCountUpDn.Name = "ReqEventCountUpDn";
this.ReqEventCountUpDn.Size = new System.Drawing.Size(48, 20);
this.ReqEventCountUpDn.TabIndex = 7;
//
// label4
//
this.label4.Location = new System.Drawing.Point(192, 104);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(128, 20);
this.label4.TabIndex = 6;
this.label4.Text = "Events to Qualify:";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// EventCountUpDn
//
this.EventCountUpDn.Location = new System.Drawing.Point(144, 104);
this.EventCountUpDn.Name = "EventCountUpDn";
this.EventCountUpDn.Size = new System.Drawing.Size(48, 20);
this.EventCountUpDn.TabIndex = 5;
//
// label3
//
this.label3.Location = new System.Drawing.Point(8, 104);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(128, 20);
this.label3.TabIndex = 4;
this.label3.Text = "Number of Events:";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// PaxPointsText
//
this.PaxPointsText.Location = new System.Drawing.Point(144, 80);
this.PaxPointsText.Name = "PaxPointsText";
this.PaxPointsText.Size = new System.Drawing.Size(248, 20);
this.PaxPointsText.TabIndex = 3;
this.PaxPointsText.Text = "";
//
// label2
//
this.label2.Location = new System.Drawing.Point(8, 80);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(128, 20);
this.label2.TabIndex = 2;
this.label2.Text = "PAX Points Sequence:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// ClassPointsText
//
this.ClassPointsText.Location = new System.Drawing.Point(144, 56);
this.ClassPointsText.Name = "ClassPointsText";
this.ClassPointsText.Size = new System.Drawing.Size(248, 20);
this.ClassPointsText.TabIndex = 1;
this.ClassPointsText.Text = "";
//
// label1
//
this.label1.Location = new System.Drawing.Point(8, 56);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(128, 20);
this.label1.TabIndex = 0;
this.label1.Text = "Class Points Sequence:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// EventsPage
//
this.EventsPage.Controls.Add(this.EventActionsGroup);
this.EventsPage.Controls.Add(this.EventDetailsGroup);
this.EventsPage.Controls.Add(this.EventList);
this.EventsPage.Location = new System.Drawing.Point(4, 22);
this.EventsPage.Name = "EventsPage";
this.EventsPage.Size = new System.Drawing.Size(856, 423);
this.EventsPage.TabIndex = 2;
this.EventsPage.Text = "Events";
//
// EventActionsGroup
//
this.EventActionsGroup.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.EventActionsGroup.Controls.Add(this.GenerateEventReportButton);
this.EventActionsGroup.Controls.Add(this.SyncAllEvents);
this.EventActionsGroup.Controls.Add(this.SyncSingleEvent);
this.EventActionsGroup.Location = new System.Drawing.Point(568, 152);
this.EventActionsGroup.Name = "EventActionsGroup";
this.EventActionsGroup.Size = new System.Drawing.Size(280, 128);
this.EventActionsGroup.TabIndex = 24;
this.EventActionsGroup.TabStop = false;
this.EventActionsGroup.Text = "Event Actions";
//
// GenerateEventReportButton
//
this.GenerateEventReportButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.GenerateEventReportButton.Location = new System.Drawing.Point(16, 88);
this.GenerateEventReportButton.Name = "GenerateEventReportButton";
this.GenerateEventReportButton.Size = new System.Drawing.Size(248, 23);
this.GenerateEventReportButton.TabIndex = 22;
this.GenerateEventReportButton.Text = "Generate event report...";
this.GenerateEventReportButton.Click += new System.EventHandler(this.GenerateEventReportButton_Click);
//
// SyncAllEvents
//
this.SyncAllEvents.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.SyncAllEvents.Location = new System.Drawing.Point(16, 53);
this.SyncAllEvents.Name = "SyncAllEvents";
this.SyncAllEvents.Size = new System.Drawing.Size(248, 23);
this.SyncAllEvents.TabIndex = 21;
this.SyncAllEvents.Text = "Sync all events with championship...";
//
// SyncSingleEvent
//
this.SyncSingleEvent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.SyncSingleEvent.Location = new System.Drawing.Point(16, 24);
this.SyncSingleEvent.Name = "SyncSingleEvent";
this.SyncSingleEvent.Size = new System.Drawing.Size(248, 23);
this.SyncSingleEvent.TabIndex = 20;
this.SyncSingleEvent.Text = "Sync selected event with championship...";
this.SyncSingleEvent.Click += new System.EventHandler(this.SyncSingleEvent_Click);
//
// EventDetailsGroup
//
this.EventDetailsGroup.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.EventDetailsGroup.Controls.Add(this.DeleteEventButton);
this.EventDetailsGroup.Controls.Add(this.label10);
this.EventDetailsGroup.Controls.Add(this.EventMover);
this.EventDetailsGroup.Controls.Add(this.EventFilenameText);
this.EventDetailsGroup.Controls.Add(this.label9);
this.EventDetailsGroup.Controls.Add(this.EventDateText);
this.EventDetailsGroup.Controls.Add(this.label8);
this.EventDetailsGroup.Controls.Add(this.EventNameText);
this.EventDetailsGroup.Controls.Add(this.label7);
this.EventDetailsGroup.Enabled = false;
this.EventDetailsGroup.Location = new System.Drawing.Point(568, 8);
this.EventDetailsGroup.Name = "EventDetailsGroup";
this.EventDetailsGroup.Size = new System.Drawing.Size(280, 128);
this.EventDetailsGroup.TabIndex = 22;
this.EventDetailsGroup.TabStop = false;
this.EventDetailsGroup.Text = "Selected Event Details";
//
// DeleteEventButton
//
this.DeleteEventButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.DeleteEventButton.Location = new System.Drawing.Point(104, 96);
this.DeleteEventButton.Name = "DeleteEventButton";
this.DeleteEventButton.Size = new System.Drawing.Size(168, 23);
this.DeleteEventButton.TabIndex = 19;
this.DeleteEventButton.Text = "Delete Event";
//
// label10
//
this.label10.Location = new System.Drawing.Point(8, 88);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(56, 32);
this.label10.TabIndex = 17;
this.label10.Text = "Move:";
this.label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// EventMover
//
this.EventMover.LargeChange = 1;
this.EventMover.Location = new System.Drawing.Point(72, 88);
this.EventMover.Maximum = 1;
this.EventMover.Minimum = -1;
this.EventMover.Name = "EventMover";
this.EventMover.Size = new System.Drawing.Size(24, 32);
this.EventMover.TabIndex = 16;
this.EventMover.TabStop = true;
//
// EventFilenameText
//
this.EventFilenameText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.EventFilenameText.Location = new System.Drawing.Point(72, 64);
this.EventFilenameText.Name = "EventFilenameText";
this.EventFilenameText.Size = new System.Drawing.Size(200, 20);
this.EventFilenameText.TabIndex = 7;
this.EventFilenameText.Text = "";
//
// label9
//
this.label9.Location = new System.Drawing.Point(8, 64);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(56, 20);
this.label9.TabIndex = 6;
this.label9.Text = "Filename:";
this.label9.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// EventDateText
//
this.EventDateText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.EventDateText.Location = new System.Drawing.Point(72, 40);
this.EventDateText.Name = "EventDateText";
this.EventDateText.Size = new System.Drawing.Size(200, 20);
this.EventDateText.TabIndex = 5;
this.EventDateText.Text = "";
//
// label8
//
this.label8.Location = new System.Drawing.Point(8, 40);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(56, 20);
this.label8.TabIndex = 4;
this.label8.Text = "Date:";
this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// EventNameText
//
this.EventNameText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.EventNameText.Location = new System.Drawing.Point(72, 16);
this.EventNameText.Name = "EventNameText";
this.EventNameText.Size = new System.Drawing.Size(200, 20);
this.EventNameText.TabIndex = 3;
this.EventNameText.Text = "";
//
// label7
//
this.label7.Location = new System.Drawing.Point(8, 16);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(56, 20);
this.label7.TabIndex = 2;
this.label7.Text = "Name:";
this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
// EventList
//
this.EventList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.EventList.IntegralHeight = false;
this.EventList.Location = new System.Drawing.Point(8, 8);
this.EventList.Name = "EventList";
this.EventList.Size = new System.Drawing.Size(552, 403);
this.EventList.TabIndex = 21;
this.EventList.SelectedIndexChanged += new System.EventHandler(this.EventList_SelectedIndexChanged);
//
// ClassPointsPage
//
this.ClassPointsPage.Controls.Add(this.ClassStandingsList);
this.ClassPointsPage.Location = new System.Drawing.Point(4, 22);
this.ClassPointsPage.Name = "ClassPointsPage";
this.ClassPointsPage.Size = new System.Drawing.Size(856, 423);
this.ClassPointsPage.TabIndex = 1;
this.ClassPointsPage.Text = "Class Championship Points";
//
// ClassStandingsList
//
this.ClassStandingsList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.ClassCol,
this.DriverCol,
this.CarCol,
this.ClassPointsCol});
this.ClassStandingsList.Dock = System.Windows.Forms.DockStyle.Fill;
this.ClassStandingsList.FullRowSelect = true;
this.ClassStandingsList.GridLines = true;
this.ClassStandingsList.Location = new System.Drawing.Point(0, 0);
this.ClassStandingsList.MultiSelect = false;
this.ClassStandingsList.Name = "ClassStandingsList";
this.ClassStandingsList.Size = new System.Drawing.Size(856, 423);
this.ClassStandingsList.TabIndex = 2;
this.ClassStandingsList.View = System.Windows.Forms.View.Details;
//
// ClassCol
//
this.ClassCol.Text = "Class";
//
// DriverCol
//
this.DriverCol.Text = "Driver";
this.DriverCol.Width = 150;
//
// CarCol
//
this.CarCol.Text = "Car";
this.CarCol.Width = 150;
//
// ClassPointsCol
//
this.ClassPointsCol.Text = "Pos (Pts/Drops)";
this.ClassPointsCol.Width = 100;
//
// PaxPointsPage
//
this.PaxPointsPage.Controls.Add(this.PaxStandingsList);
this.PaxPointsPage.Location = new System.Drawing.Point(4, 22);
this.PaxPointsPage.Name = "PaxPointsPage";
this.PaxPointsPage.Size = new System.Drawing.Size(856, 423);
this.PaxPointsPage.TabIndex = 3;
this.PaxPointsPage.Text = "PAX Championship Points";
//
// PaxStandingsList
//
this.PaxStandingsList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.PaxClassCol,
this.PaxDriverCol,
this.PaxCarCol,
this.PaxPointsCol});
this.PaxStandingsList.Dock = System.Windows.Forms.DockStyle.Fill;
this.PaxStandingsList.FullRowSelect = true;
this.PaxStandingsList.GridLines = true;
this.PaxStandingsList.Location = new System.Drawing.Point(0, 0);
this.PaxStandingsList.MultiSelect = false;
this.PaxStandingsList.Name = "PaxStandingsList";
this.PaxStandingsList.Size = new System.Drawing.Size(856, 423);
this.PaxStandingsList.TabIndex = 3;
this.PaxStandingsList.View = System.Windows.Forms.View.Details;
//
// PaxClassCol
//
this.PaxClassCol.Text = "Class";
//
// PaxDriverCol
//
this.PaxDriverCol.Text = "Driver";
this.PaxDriverCol.Width = 150;
//
// PaxCarCol
//
this.PaxCarCol.Text = "Car";
this.PaxCarCol.Width = 150;
//
// PaxPointsCol
//
this.PaxPointsCol.Text = "Pos (Pts/Drops)";
this.PaxPointsCol.Width = 100;
//
// SaveReport
//
this.SaveReport.DefaultExt = "html";
this.SaveReport.Filter = "HTML Reports (*.html)|*.html|All Files (*.*)|*.*";
this.SaveReport.Title = "Save Report";
//
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(864, 473);
this.Controls.Add(this.TabControl);
this.Controls.Add(this.StatusBar);
this.Menu = this.MainMenu;
this.MinimumSize = new System.Drawing.Size(600, 448);
this.Name = "MainForm";
this.Text = "Season Manager";
this.Closing += new System.ComponentModel.CancelEventHandler(this.MainForm_Closing);
((System.ComponentModel.ISupportInitialize)(this.StatusPanel)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.FilenamePanel)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.ModifiedPanel)).EndInit();
this.TabControl.ResumeLayout(false);
this.SettingsPage.ResumeLayout(false);
this.ClassActionsGroup.ResumeLayout(false);
this.ClassDetailsGroup.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.DropCountUpDn)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.ReqEventCountUpDn)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.EventCountUpDn)).EndInit();
this.EventsPage.ResumeLayout(false);
this.EventActionsGroup.ResumeLayout(false);
this.EventDetailsGroup.ResumeLayout(false);
this.ClassPointsPage.ResumeLayout(false);
this.PaxPointsPage.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new MainForm());
}
public ulong GetNextID()
{
ulong rval = 0;
if (season_data != null)
{
rval = season_data.Payload.DocState.next_id++;
}
return rval;
}
public void StatusMessage(string message)
{
StatusTimer.Enabled = false;
StatusPanel.Text = message;
StatusTimer.Enabled = true;
}
private void StatusTimer_Tick(object sender, System.EventArgs e)
{
StatusTimer.Enabled = false;
StatusPanel.Text = "";
}
private void ExitMenu_Click(object sender, System.EventArgs e)
{
Close();
}
private void NewMenu_Click(object sender, System.EventArgs e)
{
CloseMenu_Click(this, e);
if (season_data == null)
{
season_data = new SeasonWrapper();
season_data.LoadDefaults();
UpdateDisplay();
StatusMessage("New season created.");
}
}
private void OpenMenu_Click(object sender, System.EventArgs e)
{
CloseMenu_Click(this, e);
if (season_data == null)
{
if (OpenFile.ShowDialog(this) == DialogResult.OK)
{
season_data = new SeasonWrapper();
if (season_data.LoadFromFile(OpenFile.FileName))
{
UpdateDisplay();
StatusMessage("Opened file '" + OpenFile.FileName + "'.");
}
else
{
season_data = null;
GC.Collect();
StatusMessage("Error opening file '" + OpenFile.FileName + "'.");
}
}
}
}
private void SaveMenu_Click(object sender, System.EventArgs e)
{
if (season_data != null)
{
if (season_data.Payload.DocState.filename == "")
{
SaveAsMenu_Click(this, e);
}
else
{
season_data.Payload.DocState.modified = false;
if (season_data.SaveToFile(season_data.Payload.DocState.filename))
{
StatusMessage("Season saved to file '" + season_data.Payload.DocState.filename + "'.");
}
else
{
season_data.Payload.DocState.modified = true;
StatusMessage("Error saving to file '" + season_data.Payload.DocState.filename + "'.");
}
}
}
}
private void SaveAsMenu_Click(object sender, System.EventArgs e)
{
if (season_data != null)
{
if (SaveFile.ShowDialog(this) == DialogResult.OK)
{
season_data.Payload.DocState.filename = SaveFile.FileName;
UpdateDisplay();
SaveMenu_Click(this, e);
}
}
}
private void CloseMenu_Click(object sender, System.EventArgs e)
{
if (season_data != null)
{
DialogResult result = DialogResult.No;
if (season_data.Payload.DocState.modified)
{
result = MessageBox.Show(this, "The current season is modified, save before closing?", "Save Season?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
}
switch (result)
{
case DialogResult.Yes:
SaveMenu_Click(this, e);
if (season_data.Payload.DocState.modified)
{
return; // user cancelled the save operation
}
goto case DialogResult.No;
case DialogResult.No:
season_data = null;
GC.Collect();
UpdateDisplay();
StatusMessage("Season file closed.");
break;
default:
// do nothing
break;
}
}
}
public void UpdateDisplay()
{
if (season_data == null)
{
// Update StatusBar
FilenamePanel.Text = "No season open";
ModifiedPanel.Text = "Unmodified";
// Update Season Info
SeasonNameText.Text = "";
ClubNameText.Text = "";
// Update Settings
ClassPointsText.Text = "";
SingleEntrantClassPointsText.Text = "";
PaxPointsText.Text = "";
SingleEntrantPaxPointsText.Text = "";
EventCountUpDn.Value = 0;
ReqEventCountUpDn.Value = 0;
DropCountUpDn.Value = 0;
// Update Class List
ClassList.Items.Clear();
// Update Event List
EventList.Items.Clear();
// Update Class Standing List
ClassStandingsList.Items.Clear();
}
else
{
#region Update StatusBar
if (season_data.Payload.DocState.filename == "")
{
FilenamePanel.Text = "New file";
}
else
{
FilenamePanel.Text = season_data.Payload.DocState.filename;
}
if (season_data.Payload.DocState.modified)
{
ModifiedPanel.Text = "Modified";
}
else
{
ModifiedPanel.Text = "Unmodified";
}
#endregion
#region Update Season Info
SeasonNameText.Text = season_data.Payload.name;
ClubNameText.Text = season_data.Payload.club;
#endregion
#region Update Settings
ClassPointsText.Text = season_data.Payload.Settings.class_points;
SingleEntrantClassPointsText.Text = season_data.Payload.Settings.single_entrant_class_points.ToString();
PaxPointsText.Text = season_data.Payload.Settings.pax_points;
SingleEntrantPaxPointsText.Text = season_data.Payload.Settings.single_entrant_pax_points.ToString();
EventCountUpDn.Value = season_data.Payload.Settings.event_count;
ReqEventCountUpDn.Value = season_data.Payload.Settings.min_event_count;
DropCountUpDn.Value = season_data.Payload.Settings.drop_count;
#endregion
#region Update Class List
ClassList.BeginUpdate();
{
ClassList.Items.Clear();
for (int i=0; i<season_data.Payload.Classes.Length; i++)
{
ClassList.Items.Add(new ClassWrapper(ref season_data.Payload.Classes[i]));
}
}
ClassList.EndUpdate();
#endregion
#region Update Event List
EventList.BeginUpdate();
{
EventList.Items.Clear();
for (int i=0; i<season_data.Payload.Events.Length; i++)
{
EventList.Items.Add(new EventWrapper(ref season_data.Payload.Events[i]));
}
}
EventList.EndUpdate();
#endregion
#region Update Class Standing List
ClassStandingsList.BeginUpdate();
ClassStandingsList.Items.Clear();
// update the events columns
while (ClassStandingsList.Columns.Count > 4)
{
ClassStandingsList.Columns.RemoveAt(4);
}
for (uint i=0; i<season_data.Payload.Settings.event_count; i++)
{
ColumnHeader event_col = new ColumnHeader();
event_col.Text = "Round " + (i+1).ToString();
event_col.Width = 60;
event_col.TextAlign = HorizontalAlignment.Center;
ClassStandingsList.Columns.Add(event_col);
}
// loop through the drivers adding results
for (int i=0; i<season_data.Payload.Drivers.Length; i++)
{
DriverWrapper curr_driver = new DriverWrapper(ref season_data.Payload.Drivers[i]);
for (int j=0; j<season_data.Payload.Classes.Length; j++)
{
ClassWrapper curr_class = new ClassWrapper(ref season_data.Payload.Classes[j]);
ListViewItem item = null;
for (int k=0; k<curr_driver.Payload.Points.Length; k++)
{
if (curr_driver.Payload.Points[k].class_id == curr_class.Payload.id)
{
if (item == null)
{
item = new ListViewItem();
item.Tag = curr_driver;
item.Text = curr_class.Payload.id;
item.SubItems.Add(curr_driver.ToString());
item.SubItems.Add(curr_driver.Payload.car);
int pos;
int pts;
int pts_d;
bool qual;
season_data.GetClassStandings(curr_driver, curr_class.Payload.id, ExcludeMenu.Checked, out pos, out pts, out pts_d, out qual);
if (pos == 0)
{
item.SubItems.Add("-");
}
else
{
item.SubItems.Add(pos.ToString() + " (" + pts.ToString() + "/" + pts_d.ToString() + ")");
}
for (uint c=0; c<season_data.Payload.Settings.event_count; c++)
{
item.SubItems.Add("-");
}
if (qual)
{
item.ForeColor = Color.Black;
}
else
{
item.ForeColor = Color.DarkGray;
}
ClassStandingsList.Items.Add(item);
}
item.SubItems[(int)curr_driver.Payload.Points[k].event_number + 3].Text = curr_driver.Payload.Points[k].class_amount.ToString();
}
}
}
}
ClassStandingsList.EndUpdate();
#endregion
#region Update Pax Standing List
PaxStandingsList.BeginUpdate();
PaxStandingsList.Items.Clear();
// update the events columns
while (PaxStandingsList.Columns.Count > 4)
{
PaxStandingsList.Columns.RemoveAt(4);
}
for (uint i=0; i<season_data.Payload.Settings.event_count; i++)
{
ColumnHeader event_col = new ColumnHeader();
event_col.Text = "Round " + (i+1).ToString();
event_col.Width = 60;
event_col.TextAlign = HorizontalAlignment.Center;
PaxStandingsList.Columns.Add(event_col);
}
// loop through the drivers adding results
for (int i=0; i<season_data.Payload.Drivers.Length; i++)
{
DriverWrapper curr_driver = new DriverWrapper(ref season_data.Payload.Drivers[i]);
for (int j=0; j<2; j++)
{
bool ladies = (j == 1);
ListViewItem item = null;
for (int k=0; k<curr_driver.Payload.Points.Length; k++)
{
if (season_data.GetClass(curr_driver.Payload.Points[k].class_id).Payload.ladies == ladies)
{
if (item == null)
{
item = new ListViewItem();
item.Tag = curr_driver;
item.Text = ladies ? "Ladies" : "Open";
item.SubItems.Add(curr_driver.ToString());
item.SubItems.Add(curr_driver.Payload.car);
int pos;
int pts;
int pts_d;
bool qual;
season_data.GetPaxStandings(curr_driver, ladies, ExcludeMenu.Checked, out pos, out pts, out pts_d, out qual);
if (pos == 0)
{
item.SubItems.Add("-");
}
else
{
item.SubItems.Add(pos.ToString() + " (" + pts.ToString() + "/" + pts_d.ToString() + ")");
}
for (uint c=0; c<season_data.Payload.Settings.event_count; c++)
{
item.SubItems.Add("-");
}
if (qual)
{
item.ForeColor = Color.Black;
}
else
{
item.ForeColor = Color.DarkGray;
}
PaxStandingsList.Items.Add(item);
}
item.SubItems[(int)curr_driver.Payload.Points[k].event_number + 3].Text = curr_driver.Payload.Points[k].pax_amount.ToString();
}
}
}
}
PaxStandingsList.EndUpdate();
#endregion
}
}
private void ClassList_SelectedIndexChanged(object sender, System.EventArgs e)
{
ignore_class_details_change = true;
if (ClassList.SelectedItem == null)
{
ClassDetailsGroup.Enabled = false;
ClassIdText.Text = "";
ClassDescText.Text = "";
ClassLadiesCheck.Checked = false;
ClassNonPointsCheck.Checked = false;
ApplyClassButton.Enabled = false;
}
else
{
ClassWrapper c = (ClassWrapper)ClassList.SelectedItem;
ClassIdText.Text = c.Payload.id;
ClassDescText.Text = c.Payload.description;
ClassLadiesCheck.Checked = c.Payload.ladies;
ClassNonPointsCheck.Checked = c.Payload.non_points;
ClassDetailsGroup.Enabled = true;
ApplyClassButton.Enabled = false;
}
ignore_class_details_change = false;
}
private void ApplyClassButton_Click(object sender, System.EventArgs e)
{
if (ClassList.SelectedItem != null)
{
ClassWrapper c = (ClassWrapper)ClassList.SelectedItem;
c.Payload.id = ClassIdText.Text;
c.Payload.description = ClassDescText.Text;
c.Payload.ladies = ClassLadiesCheck.Checked;
c.Payload.non_points = ClassNonPointsCheck.Checked;
ApplyClassButton.Enabled = false;
season_data.Payload.DocState.modified = true;
UpdateDisplay();
}
}
private bool ignore_class_details_change = false;
private void ClassDetailsChanged(object sender, System.EventArgs e)
{
if (ignore_class_details_change) return;
ApplyClassButton.Enabled = true;
}
private void EventList_SelectedIndexChanged(object sender, System.EventArgs e)
{
if (EventList.SelectedItem == null)
{
//EventDetailsGroup.Enabled = false;
EventNameText.Text = "";
EventDateText.Text = "";
EventFilenameText.Text = "";
}
else
{
EventWrapper ev = (EventWrapper)EventList.SelectedItem;
EventNameText.Text = ev.Payload.name;
EventDateText.Text = ev.Payload.date;
EventFilenameText.Text = ev.Payload.data_file;
//EventDetailsGroup.Enabled = true;
}
}
private void SyncSingleEvent_Click(object sender, System.EventArgs e)
{
if (EventList.SelectedItem != null)
{
EventWrapper curr_event = (EventWrapper)EventList.SelectedItem;
new ImportEventForm(ref curr_event, ref season_data).ShowDialog();
UpdateDisplay();
}
}
private void MainForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
CloseMenu_Click(this, null);
if (season_data != null)
{
e.Cancel = true;
}
}
private void ExcludeMenu_Click(object sender, System.EventArgs e)
{
ExcludeMenu.Checked = !ExcludeMenu.Checked;
UpdateDisplay();
}
private void GenerateEventReportButton_Click(object sender, System.EventArgs e)
{
}
private void GenerateAllEventReportsMenu_Click(object sender, System.EventArgs e)
{
if (season_data != null)
{
MenuItem menuitem = (MenuItem)sender;
if (menuitem.Index == 0)
{
for (int i=0; i<season_data.Payload.Events.Length; i++)
{
if (GenerateEventReport(i, EventReportType.CLASS) == false)
{
break; // out of for(i)
}
if (GenerateEventReport(i, EventReportType.PAX) == false)
{
break; // out of for(i)
}
if (GenerateEventReport(i, EventReportType.RAW) == false)
{
break; // out of for(i)
}
}
}
else
{
GenerateEventReport(menuitem.Index - 2, EventReportType.CLASS);
GenerateEventReport(menuitem.Index - 2, EventReportType.PAX);
GenerateEventReport(menuitem.Index - 2, EventReportType.RAW);
}
}
}
private void EventReportMenu_Popup(object sender, System.EventArgs e)
{
// blank the old menu items
while (EventReportMenu.MenuItems.Count > 2)
{
EventReportMenu.MenuItems.RemoveAt(2);
}
// add the per-report menu items
if (season_data != null)
{
for (int i=0; i<season_data.Payload.Events.Length; i++)
{
MenuItem menuitem = new MenuItem(MenuMerge.Add, 0, Shortcut.None, season_data.Payload.Events[i].number.ToString() + " - " + season_data.Payload.Events[i].name, new EventHandler(GenerateAllEventReportsMenu_Click), null, null, null);
EventReportMenu.MenuItems.Add(menuitem);
}
}
}
private void GenerateReport(object sender, System.EventArgs e)
{
if (season_data == null) return;
ListView list;
string standings_type_text;
bool class_report = true;
if (sender == ClassReportMenu)
{
list = ClassStandingsList;
standings_type_text = "Class Standings";
}
else
{
list = PaxStandingsList;
standings_type_text = "PAX Standings";
class_report = false;
}
if (ExcludeMenu.Checked)
{
standings_type_text += " [Qualified]";
}
SaveReport.FileName = season_data.Payload.name + " " + standings_type_text + ".html";
if (SaveReport.ShowDialog() == DialogResult.OK)
{
string css_styles_block =
"h1 { font-family: Arial; font-size: 16pt; font-weight: bold; text-align: center }" + Environment.NewLine +
"table { border-collapse: collapse }" + Environment.NewLine +
"tr.main_header { background-color: #AAAAAA; }" + Environment.NewLine +
"tr.sub_header { background-color: #DDDDDD; font-weight: bold }" + Environment.NewLine +
"tr.q { background-color: #AAFFAA }" + Environment.NewLine +
"tr.nq { background-color: #FFFFFF }" + Environment.NewLine +
"th { font-family: Arial; font-size: 10pt; text-align: center; border: 1px solid black }" + Environment.NewLine +
"td { font-family: Arial; font-size: 8pt; text-align: center; border: 1px solid black }" + Environment.NewLine +
"td.left { font-family: Arial; font-size: 8pt; text-align: left; border: 1px solid black }";
XmlTextWriter w = new XmlTextWriter(SaveReport.FileName, null);
w.Formatting = Formatting.Indented;
// start the html
w.WriteStartElement("html");
// output the html header
w.WriteStartElement("head");
w.WriteElementString("title", season_data.Payload.club + " - " + season_data.Payload.name + " - " + standings_type_text);
w.WriteStartElement("style"); w.WriteAttributeString("type", "text/css");
w.WriteString(css_styles_block);
w.WriteEndElement();
w.WriteEndElement();
// start the body
w.WriteStartElement("body");
// write the title info
w.WriteElementString("h1", season_data.Payload.club + " - " + season_data.Payload.name + " - " + standings_type_text);
// start the table
w.WriteStartElement("table");
// write the main table header
#region main header
w.WriteStartElement("tr"); w.WriteAttributeString("class", "main_header");
w.WriteStartElement("th"); w.WriteAttributeString("rowspan", "2"); w.WriteAttributeString("width", "5%");
w.WriteString("Class");
w.WriteEndElement();
w.WriteStartElement("th"); w.WriteAttributeString("rowspan", "2"); w.WriteAttributeString("width", "5%");
w.WriteString("Position");
w.WriteEndElement();
w.WriteStartElement("th"); w.WriteAttributeString("rowspan", "2"); w.WriteAttributeString("width", "10%");
w.WriteString("Driver");
w.WriteEndElement();
w.WriteStartElement("th"); w.WriteAttributeString("rowspan", "2"); w.WriteAttributeString("width", "10%");
w.WriteString("Car");
w.WriteEndElement();
w.WriteStartElement("th"); w.WriteAttributeString("rowspan", "2"); w.WriteAttributeString("width", "5%");
w.WriteString("Points");
w.WriteEndElement();
w.WriteStartElement("th"); w.WriteAttributeString("rowspan", "2"); w.WriteAttributeString("width", "5%");
w.WriteString("Points w/ " + season_data.Payload.Settings.drop_count.ToString() + " Drop(s)");
w.WriteEndElement();
w.WriteStartElement("th"); w.WriteAttributeString("colspan", season_data.Payload.Settings.event_count.ToString());
w.WriteElementString("center", "Round");
w.WriteEndElement();
w.WriteEndElement();
w.WriteStartElement("tr"); w.WriteAttributeString("class", "main_header");
for (int i=0; i<season_data.Payload.Settings.event_count; i++)
{
w.WriteStartElement("th"); w.WriteAttributeString("width", Convert.ToString((int)50 / season_data.Payload.Settings.event_count) + "%");
w.WriteString((i+1).ToString());
w.WriteEndElement();
}
w.WriteEndElement();
#endregion
// loop through all the rows
ArrayList items = new ArrayList();
items.AddRange(list.Items);
items.Sort(new StandingsListSorter());
string last_class_name = "";
foreach (ListViewItem item in items)
{
DriverWrapper driver = (DriverWrapper)item.Tag;
// skip unqualified drivers if allowed
//if (ExcludeMenu.Checked && (driver.Payload.Points.Length + (season_data.Payload.Settings.event_count - season_data.Payload.Events.Length) < season_data.Payload.Settings.min_event_count))
if (ExcludeMenu.Checked &&
((class_report && !driver.GetClassQualifiedStatus(item.Text, season_data.Payload.Settings.min_event_count)) ||
(!class_report && !driver.GetPaxQualifiedStatus((item.Text == "Ladies"), season_data.Payload.Settings.min_event_count, season_data))))
{
continue;
}
// write the sub table header (if necessary)
#region sub header
if (last_class_name != item.Text)
{
last_class_name = item.Text;
string class_desc;
if (sender == ClassReportMenu)
{
class_desc = season_data.GetClass(item.Text).Payload.description;
}
else
{
class_desc = item.Text + " PAX Championship";
}
w.WriteStartElement("tr"); w.WriteAttributeString("class", "sub_header");
w.WriteStartElement("td"); w.WriteAttributeString("colspan", "4"); w.WriteAttributeString("class", "left");
w.WriteString(class_desc);
w.WriteEndElement();
w.WriteElementString("td", "Points");
w.WriteElementString("td", "w/ Drops");
for (int i=0; i<season_data.Payload.Settings.event_count; i++)
{
w.WriteElementString("td", (i+1).ToString());
}
w.WriteEndElement();
}
#endregion
// write the current row
string[] standings = item.SubItems[3].Text.Split(" (/)".ToCharArray(), 10);
string position = standings[0];
string points = standings[2];
string points_w_drops = standings[3];
w.WriteStartElement("tr"); w.WriteAttributeString("class", (item.ForeColor == Color.Black) ? "q" : "nq");
w.WriteStartElement("td"); w.WriteAttributeString("class", "left");
w.WriteString(item.Text);
w.WriteEndElement();
w.WriteStartElement("td"); w.WriteAttributeString("class", "left");
w.WriteString(position);
w.WriteEndElement();
w.WriteStartElement("td"); w.WriteAttributeString("class", "left");
w.WriteString(driver.Payload.first_name + " " + driver.Payload.last_name.Substring(0,1));
w.WriteEndElement();
w.WriteStartElement("td"); w.WriteAttributeString("class", "left");
w.WriteString(driver.Payload.car);
w.WriteEndElement();
w.WriteElementString("td", points);
w.WriteElementString("td", points_w_drops);
for (int i=0; i<season_data.Payload.Settings.event_count; i++)
{
w.WriteElementString("td", item.SubItems[i+4].Text);
}
w.WriteEndElement();
}
// stop the table
w.WriteEndElement();
// stop the body
w.WriteEndElement();
// stop the html
w.WriteEndElement();
// close the file
w.Close();
}
}
private void PerfectAttendanceMenu_Click(object sender, System.EventArgs e)
{
if (season_data == null) return;
SaveReport.FileName = season_data.Payload.name + " Perfect Attendance.html";
if (SaveReport.ShowDialog() == DialogResult.OK)
{
XmlTextWriter w = new XmlTextWriter(SaveReport.FileName, null);
w.Formatting = Formatting.Indented;
w.WriteStartElement("html");
w.WriteStartElement("head");
w.WriteElementString("title", season_data.Payload.club + " - " + season_data.Payload.name + " - Perfect Attendance");
w.WriteEndElement();
w.WriteStartElement("body");
w.WriteStartElement("center");
w.WriteStartElement("h2");
w.WriteString(season_data.Payload.club + " - " + season_data.Payload.name + " - Perfect Attendance");
w.WriteEndElement();
w.WriteEndElement();
w.WriteStartElement("table");
w.WriteAttributeString("align", "center");
w.WriteAttributeString("border", "0");
w.WriteAttributeString("width", "60%");
foreach (DriverType driver in season_data.Payload.Drivers)
{
int event_count = 0;
for (ulong i=0; i<season_data.Payload.Settings.event_count; i++)
{
foreach (PointsType points in driver.Points)
{
if (points.event_number == i)
{
event_count++;
break; // out of foreach(points)
}
}
}
if (event_count >= season_data.Payload.Events.Length)
{
w.WriteStartElement("tr");
w.WriteStartElement("td");
w.WriteElementString("p", driver.first_name + " " + driver.last_name);
w.WriteEndElement();
w.WriteEndElement();
}
}
w.WriteEndElement();
w.WriteEndElement();
w.WriteEndElement();
w.Close();
}
}
private enum EventReportType
{
CLASS,
PAX,
RAW
}
private bool GenerateEventReport(int event_number, EventReportType report_type)
{
// make sure there's season data
if (season_data == null) return false;
// make sure we're trying to report on a valid event
EventType event_data = null;
if ((event_number >= 0) && (event_number < season_data.Payload.Events.Length))
{
event_data = season_data.Payload.Events[event_number];
}
if (event_data == null) return false;
// parse the results file
ArrayList results_array = Utils.ParseResultsFile(event_data);
if (results_array.Count == 0) return false;
// generate the title for this report
string standings_type_text = "";
switch (report_type)
{
case EventReportType.CLASS:
standings_type_text = "Class Results";
break;
case EventReportType.PAX:
standings_type_text = "PAX Results";
break;
case EventReportType.RAW:
standings_type_text = "Raw Results";
break;
}
string standings_title_text = "Round " + event_data.number.ToString() + " - " + event_data.date + " - " + event_data.name + " - " + standings_type_text;
SaveReport.FileName = season_data.Payload.name + " " + standings_type_text + ".html";
if (SaveReport.ShowDialog() == DialogResult.OK)
{
/*
string css_styles_block =
"h1 { font-family: Arial; font-size: 16pt; font-weight: bold; text-align: center }" + Environment.NewLine +
"table { border-collapse: collapse }" + Environment.NewLine +
"tr.main_header { background-color: #AAAAAA; }" + Environment.NewLine +
"tr.sub_header { background-color: #DDDDDD; font-weight: bold }" + Environment.NewLine +
"tr.q { background-color: #AAFFAA }" + Environment.NewLine +
"tr.nq { background-color: #FFFFFF }" + Environment.NewLine +
"th { font-family: Arial; font-size: 10pt; text-align: center; border: 1px solid black }" + Environment.NewLine +
"td { font-family: Arial; font-size: 8pt; text-align: center; border: 1px solid black }" + Environment.NewLine +
"td.left { font-family: Arial; font-size: 8pt; text-align: left; border: 1px solid black }";
XmlTextWriter w = new XmlTextWriter(SaveReport.FileName, null);
w.Formatting = Formatting.Indented;
// start the html
w.WriteStartElement("html");
// output the html header
w.WriteStartElement("head");
w.WriteElementString("title", season_data.Payload.club + " - " + season_data.Payload.name + " - " + standings_title_text);
w.WriteStartElement("style"); w.WriteAttributeString("type", "text/css");
w.WriteString(css_styles_block);
w.WriteEndElement();
w.WriteEndElement();
// start the body
w.WriteStartElement("body");
// write the title info
w.WriteElementString("h1", season_data.Payload.club + " - " + season_data.Payload.name + " - " + standings_title_text);
// start the table
w.WriteStartElement("table");
// write the main table header
#region main header
w.WriteStartElement("tr"); w.WriteAttributeString("class", "main_header");
w.WriteStartElement("th"); w.WriteAttributeString("rowspan", "2"); w.WriteAttributeString("width", "5%");
w.WriteString("Class");
w.WriteEndElement();
w.WriteStartElement("th"); w.WriteAttributeString("rowspan", "2"); w.WriteAttributeString("width", "5%");
w.WriteString("Position");
w.WriteEndElement();
w.WriteStartElement("th"); w.WriteAttributeString("rowspan", "2"); w.WriteAttributeString("width", "10%");
w.WriteString("Driver");
w.WriteEndElement();
w.WriteStartElement("th"); w.WriteAttributeString("rowspan", "2"); w.WriteAttributeString("width", "10%");
w.WriteString("Car");
w.WriteEndElement();
w.WriteStartElement("th"); w.WriteAttributeString("rowspan", "2"); w.WriteAttributeString("width", "5%");
w.WriteString("Points");
w.WriteEndElement();
w.WriteStartElement("th"); w.WriteAttributeString("rowspan", "2"); w.WriteAttributeString("width", "5%");
w.WriteString("Points w/ " + season_data.Payload.Settings.drop_count.ToString() + " Drop(s)");
w.WriteEndElement();
w.WriteStartElement("th"); w.WriteAttributeString("colspan", season_data.Payload.Settings.event_count.ToString());
w.WriteElementString("center", "Round");
w.WriteEndElement();
w.WriteEndElement();
w.WriteStartElement("tr"); w.WriteAttributeString("class", "main_header");
for (int i=0; i<season_data.Payload.Settings.event_count; i++)
{
w.WriteStartElement("th"); w.WriteAttributeString("width", Convert.ToString((int)50 / season_data.Payload.Settings.event_count) + "%");
w.WriteString((i+1).ToString());
w.WriteEndElement();
}
w.WriteEndElement();
#endregion
// loop through all the rows
ArrayList items = new ArrayList();
items.AddRange(list.Items);
items.Sort(new StandingsListSorter());
string last_class_name = "";
foreach (ListViewItem item in items)
{
DriverWrapper driver = (DriverWrapper)item.Tag;
// skip unqualified drivers if allowed
//if (ExcludeMenu.Checked && (driver.Payload.Points.Length + (season_data.Payload.Settings.event_count - season_data.Payload.Events.Length) < season_data.Payload.Settings.min_event_count))
if (ExcludeMenu.Checked &&
((class_report && !driver.GetClassQualifiedStatus(item.Text, season_data.Payload.Settings.min_event_count)) ||
(!class_report && !driver.GetPaxQualifiedStatus((item.Text == "Ladies"), season_data.Payload.Settings.min_event_count, season_data))))
{
continue;
}
// write the sub table header (if necessary)
#region sub header
if (last_class_name != item.Text)
{
last_class_name = item.Text;
string class_desc;
if (sender == ClassReportMenu)
{
class_desc = season_data.GetClass(item.Text).Payload.description;
}
else
{
class_desc = item.Text + " PAX Championship";
}
w.WriteStartElement("tr"); w.WriteAttributeString("class", "sub_header");
w.WriteStartElement("td"); w.WriteAttributeString("colspan", "4"); w.WriteAttributeString("class", "left");
w.WriteString(class_desc);
w.WriteEndElement();
w.WriteElementString("td", "Points");
w.WriteElementString("td", "w/ Drops");
for (int i=0; i<season_data.Payload.Settings.event_count; i++)
{
w.WriteElementString("td", (i+1).ToString());
}
w.WriteEndElement();
}
#endregion
// write the current row
string[] standings = item.SubItems[3].Text.Split(" (/)".ToCharArray(), 10);
string position = standings[0];
string points = standings[2];
string points_w_drops = standings[3];
w.WriteStartElement("tr"); w.WriteAttributeString("class", (item.ForeColor == Color.Black) ? "q" : "nq");
w.WriteStartElement("td"); w.WriteAttributeString("class", "left");
w.WriteString(item.Text);
w.WriteEndElement();
w.WriteStartElement("td"); w.WriteAttributeString("class", "left");
w.WriteString(position);
w.WriteEndElement();
w.WriteStartElement("td"); w.WriteAttributeString("class", "left");
w.WriteString(driver.Payload.first_name + " " + driver.Payload.last_name.Substring(0,1));
w.WriteEndElement();
w.WriteStartElement("td"); w.WriteAttributeString("class", "left");
w.WriteString(driver.Payload.car);
w.WriteEndElement();
w.WriteElementString("td", points);
w.WriteElementString("td", points_w_drops);
for (int i=0; i<season_data.Payload.Settings.event_count; i++)
{
w.WriteElementString("td", item.SubItems[i+4].Text);
}
w.WriteEndElement();
}
// stop the table
w.WriteEndElement();
// stop the body
w.WriteEndElement();
// stop the html
w.WriteEndElement();
// close the file
w.Close();
*/
}
else
{
return false;
}
return true;
}
}
}
using System;
using System.IO;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace SeasonManager
{
/// <summary>
/// Summary description for ImportEventForm.
/// </summary>
public class ImportEventForm : System.Windows.Forms.Form
{
private System.Windows.Forms.ListView ResultsList;
private System.Windows.Forms.Button Accept;
private System.Windows.Forms.Button Cancel;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
private System.Windows.Forms.GroupBox ResultDetailsGroup;
private System.Windows.Forms.ComboBox DriverList;
private System.Windows.Forms.RadioButton LinkDriverRadio;
private System.Windows.Forms.StatusBar StatusBar;
private System.Windows.Forms.RadioButton IgnoreDriverRadio;
private System.Windows.Forms.RadioButton AddDriverRadio;
private System.Windows.Forms.ColumnHeader MatchedDriverCol;
private System.Windows.Forms.ColumnHeader MatchedClassCol;
private System.Windows.Forms.ColumnHeader ClassCol;
private System.Windows.Forms.ColumnHeader FirstNameCol;
private System.Windows.Forms.ColumnHeader LastNameCol;
private System.Windows.Forms.ColumnHeader CarCol;
private System.Windows.Forms.ColumnHeader TotalCol;
private System.Windows.Forms.ColumnHeader PaxCol;
private System.Windows.Forms.ColumnHeader ClassPosCol;
private System.Windows.Forms.ColumnHeader PaxPosCol;
private EventWrapper event_data = null;
private ArrayList results_array = null;
private SeasonWrapper season_data = null;
public ImportEventForm(ref EventWrapper event_to_import, ref SeasonWrapper sw)
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
event_data = event_to_import;
results_array = new ArrayList();
season_data = sw;
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.ResultsList = new System.Windows.Forms.ListView();
this.MatchedClassCol = new System.Windows.Forms.ColumnHeader();
this.MatchedDriverCol = new System.Windows.Forms.ColumnHeader();
this.ClassPosCol = new System.Windows.Forms.ColumnHeader();
this.PaxPosCol = new System.Windows.Forms.ColumnHeader();
this.ClassCol = new System.Windows.Forms.ColumnHeader();
this.FirstNameCol = new System.Windows.Forms.ColumnHeader();
this.LastNameCol = new System.Windows.Forms.ColumnHeader();
this.CarCol = new System.Windows.Forms.ColumnHeader();
this.TotalCol = new System.Windows.Forms.ColumnHeader();
this.PaxCol = new System.Windows.Forms.ColumnHeader();
this.ResultDetailsGroup = new System.Windows.Forms.GroupBox();
this.IgnoreDriverRadio = new System.Windows.Forms.RadioButton();
this.AddDriverRadio = new System.Windows.Forms.RadioButton();
this.LinkDriverRadio = new System.Windows.Forms.RadioButton();
this.DriverList = new System.Windows.Forms.ComboBox();
this.Cancel = new System.Windows.Forms.Button();
this.Accept = new System.Windows.Forms.Button();
this.StatusBar = new System.Windows.Forms.StatusBar();
this.ResultDetailsGroup.SuspendLayout();
this.SuspendLayout();
//
// ResultsList
//
this.ResultsList.CheckBoxes = true;
this.ResultsList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.MatchedClassCol,
this.MatchedDriverCol,
this.ClassPosCol,
this.PaxPosCol,
this.ClassCol,
this.FirstNameCol,
this.LastNameCol,
this.CarCol,
this.TotalCol,
this.PaxCol});
this.ResultsList.Dock = System.Windows.Forms.DockStyle.Fill;
this.ResultsList.FullRowSelect = true;
this.ResultsList.GridLines = true;
this.ResultsList.HideSelection = false;
this.ResultsList.Location = new System.Drawing.Point(0, 0);
this.ResultsList.MultiSelect = false;
this.ResultsList.Name = "ResultsList";
this.ResultsList.Size = new System.Drawing.Size(552, 494);
this.ResultsList.TabIndex = 0;
this.ResultsList.View = System.Windows.Forms.View.Details;
this.ResultsList.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.ResultsList_ColumnClick);
this.ResultsList.SelectedIndexChanged += new System.EventHandler(this.ResultsList_SelectedIndexChanged);
this.ResultsList.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.ResultsList_ItemCheck);
//
// MatchedClassCol
//
this.MatchedClassCol.Text = "Matched Class";
this.MatchedClassCol.Width = 85;
//
// MatchedDriverCol
//
this.MatchedDriverCol.Text = "Matched Driver";
this.MatchedDriverCol.Width = 100;
//
// ClassPosCol
//
this.ClassPosCol.Text = "Class Pos (Points)";
this.ClassPosCol.Width = 100;
//
// PaxPosCol
//
this.PaxPosCol.Text = "PAX Pos (Points)";
this.PaxPosCol.Width = 100;
//
// ClassCol
//
this.ClassCol.Text = "Class";
this.ClassCol.Width = 85;
//
// FirstNameCol
//
this.FirstNameCol.Text = "First Name";
this.FirstNameCol.Width = 85;
//
// LastNameCol
//
this.LastNameCol.Text = "Last Name";
this.LastNameCol.Width = 85;
//
// CarCol
//
this.CarCol.Text = "Car";
this.CarCol.Width = 100;
//
// TotalCol
//
this.TotalCol.Text = "Total Time";
this.TotalCol.Width = 75;
//
// PaxCol
//
this.PaxCol.Text = "PAX Time";
this.PaxCol.Width = 75;
//
// ResultDetailsGroup
//
this.ResultDetailsGroup.Controls.Add(this.IgnoreDriverRadio);
this.ResultDetailsGroup.Controls.Add(this.AddDriverRadio);
this.ResultDetailsGroup.Controls.Add(this.LinkDriverRadio);
this.ResultDetailsGroup.Controls.Add(this.DriverList);
this.ResultDetailsGroup.Controls.Add(this.Cancel);
this.ResultDetailsGroup.Controls.Add(this.Accept);
this.ResultDetailsGroup.Dock = System.Windows.Forms.DockStyle.Right;
this.ResultDetailsGroup.Location = new System.Drawing.Point(552, 0);
this.ResultDetailsGroup.Name = "ResultDetailsGroup";
this.ResultDetailsGroup.Size = new System.Drawing.Size(216, 494);
this.ResultDetailsGroup.TabIndex = 4;
this.ResultDetailsGroup.TabStop = false;
this.ResultDetailsGroup.Text = "Selected Result Import Options";
//
// IgnoreDriverRadio
//
this.IgnoreDriverRadio.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.IgnoreDriverRadio.Checked = true;
this.IgnoreDriverRadio.Location = new System.Drawing.Point(8, 16);
this.IgnoreDriverRadio.Name = "IgnoreDriverRadio";
this.IgnoreDriverRadio.Size = new System.Drawing.Size(200, 24);
this.IgnoreDriverRadio.TabIndex = 5;
this.IgnoreDriverRadio.TabStop = true;
this.IgnoreDriverRadio.Text = "Ignore Result";
this.IgnoreDriverRadio.CheckedChanged += new System.EventHandler(this.ResultStatusChanged);
//
// AddDriverRadio
//
this.AddDriverRadio.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.AddDriverRadio.Location = new System.Drawing.Point(8, 40);
this.AddDriverRadio.Name = "AddDriverRadio";
this.AddDriverRadio.Size = new System.Drawing.Size(200, 24);
this.AddDriverRadio.TabIndex = 4;
this.AddDriverRadio.Text = "Create New Driver";
this.AddDriverRadio.CheckedChanged += new System.EventHandler(this.ResultStatusChanged);
//
// LinkDriverRadio
//
this.LinkDriverRadio.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.LinkDriverRadio.Location = new System.Drawing.Point(8, 64);
this.LinkDriverRadio.Name = "LinkDriverRadio";
this.LinkDriverRadio.Size = new System.Drawing.Size(200, 24);
this.LinkDriverRadio.TabIndex = 3;
this.LinkDriverRadio.Text = "Link to Existing Driver";
this.LinkDriverRadio.CheckedChanged += new System.EventHandler(this.ResultStatusChanged);
//
// DriverList
//
this.DriverList.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.DriverList.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.DriverList.Location = new System.Drawing.Point(24, 88);
this.DriverList.MaxDropDownItems = 25;
this.DriverList.Name = "DriverList";
this.DriverList.Size = new System.Drawing.Size(184, 21);
this.DriverList.Sorted = true;
this.DriverList.TabIndex = 2;
this.DriverList.SelectedIndexChanged += new System.EventHandler(this.DriverList_SelectedIndexChanged);
//
// Cancel
//
this.Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.Cancel.Location = new System.Drawing.Point(112, 464);
this.Cancel.Name = "Cancel";
this.Cancel.TabIndex = 1;
this.Cancel.Text = "Cancel";
this.Cancel.Click += new System.EventHandler(this.CancelButton_Click);
//
// Accept
//
this.Accept.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.Accept.Location = new System.Drawing.Point(32, 464);
this.Accept.Name = "Accept";
this.Accept.TabIndex = 0;
this.Accept.Text = "Accept";
this.Accept.Click += new System.EventHandler(this.Accept_Click);
//
// StatusBar
//
this.StatusBar.Location = new System.Drawing.Point(0, 494);
this.StatusBar.Name = "StatusBar";
this.StatusBar.Size = new System.Drawing.Size(768, 16);
this.StatusBar.TabIndex = 5;
//
// ImportEventForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(768, 510);
this.Controls.Add(this.ResultsList);
this.Controls.Add(this.ResultDetailsGroup);
this.Controls.Add(this.StatusBar);
this.Name = "ImportEventForm";
this.Text = "Import Event Results";
this.Load += new System.EventHandler(this.ImportEventForm_Load);
this.ResultDetailsGroup.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private void CancelButton_Click(object sender, System.EventArgs e)
{
Close();
}
private void ImportEventForm_Load(object sender, System.EventArgs e)
{
// load the list of drivers into the drop down
if (season_data != null)
{
DriverList.BeginUpdate();
DriverList.Items.Clear();
for (int i=0; i<season_data.Payload.Drivers.Length; i++)
{
DriverList.Items.Add(new DriverWrapper(ref season_data.Payload.Drivers[i]).ToString());
}
DriverList.EndUpdate();
}
// load the data from the event file
results_array = Utils.ParseResultsFile(event_data.Payload);
if (results_array.Count == 0)
{
Close();
return;
}
// match the results to the current roster
try
{
foreach (ResultWrapper result in results_array)
{
string proposed_alias = result.Payload.ImportedData.First_Name + " " + result.Payload.ImportedData.Last_Name;
DriverWrapper curr_driver = season_data.FindDriverByAlias(proposed_alias);
ClassWrapper curr_class = season_data.FindClassByImportedID(result.Payload.ImportedData.Class);
if (curr_class == null)
{
result.Payload.MatchedData.ignored = true;
result.Payload.MatchedData.alias = "";
result.Payload.MatchedData.class_id = "";
result.Payload.MatchedData.mode = ResultTypeMatchedDataMode.INVALID;
}
else if (curr_driver == null)
{
result.Payload.MatchedData.ignored = season_data.GetClass(curr_class.Payload.id).Payload.non_points;
result.Payload.MatchedData.alias = "";
result.Payload.MatchedData.class_id = curr_class.Payload.id;
result.Payload.MatchedData.mode = ResultTypeMatchedDataMode.ADD_DRIVER;
}
else
{
result.Payload.MatchedData.ignored = season_data.GetClass(curr_class.Payload.id).Payload.non_points;
result.Payload.MatchedData.alias = proposed_alias;
result.Payload.MatchedData.class_id = curr_class.Payload.id;
result.Payload.MatchedData.mode = ResultTypeMatchedDataMode.EXISTING_LINK;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error Matching To Roster");
Close();
}
ResultsList.ListViewItemSorter = new ResultsListSorter();
UpdateResultsList();
if (ResultsList.Items.Count > 0)
{
ResultsList.Items[0].Selected = true;
}
}
private bool UpdateResultsList_reentry_blocked = false;
public void UpdateResultsList()
{
if (UpdateResultsList_reentry_blocked) return;
UpdateResultsList_reentry_blocked = true;
ListViewItem LastSelected = null;
if (ResultsList.SelectedItems.Count > 0)
{
LastSelected = ResultsList.SelectedItems[0];
}
ResultsList.BeginUpdate();
ResultsList.Items.Clear();
for (int i=0; i<results_array.Count; i++)
{
ResultWrapper result = (ResultWrapper)results_array[i];
ListViewItem item = new ListViewItem();
UpdateResultListItem(ref item, ref result);
ResultsList.Items.Add(item);
}
ResultsList.Sort();
ResultsList.EndUpdate();
if (LastSelected != null)
{
LastSelected.Selected = true;
}
//ResultsList_SelectedIndexChanged(this, null);
UpdateResultsList_reentry_blocked = false;
}
private void UpdateResultListItem(ref ListViewItem item, ref ResultWrapper result)
{
CalculatePointsFromEventResult(ref result);
item.Tag = result;
item.Checked = !result.Payload.MatchedData.ignored;
item.Text = result.Payload.MatchedData.class_id;
if (result.Payload.MatchedData.mode == ResultTypeMatchedDataMode.EXISTING_LINK)
{
item.SubItems.Add(season_data.FindDriverByAlias(result.Payload.MatchedData.alias).ToString());
}
else
{
item.SubItems.Add(result.Payload.MatchedData.alias);
}
ulong class_position = result.Payload.StandingsData.class_position;
int class_points = result.Payload.StandingsData.class_points;
ulong pax_position = result.Payload.StandingsData.pax_position;
int pax_points = result.Payload.StandingsData.pax_points;
if (class_position == 0)
{
item.SubItems.Add("-");
}
else
{
item.SubItems.Add(class_position.ToString() + " (" + class_points.ToString() + ")");
}
if (pax_position == 0)
{
item.SubItems.Add("-");
}
else
{
item.SubItems.Add(pax_position.ToString() + " (" + pax_points.ToString() + ")");
}
item.SubItems.Add(result.Payload.ImportedData.Class);
item.SubItems.Add(result.Payload.ImportedData.First_Name);
item.SubItems.Add(result.Payload.ImportedData.Last_Name);
item.SubItems.Add(result.Payload.ImportedData.Car);
item.SubItems.Add(result.Payload.ImportedData.Total.ToString());
item.SubItems.Add(result.Payload.ImportedData.Pax_Time.ToString());
if (result.Payload.MatchedData.ignored)
{
item.ForeColor = Color.LightGray;
item.BackColor = Color.White;
}
else
{
item.ForeColor = Color.Black;
switch (result.Payload.MatchedData.mode)
{
case ResultTypeMatchedDataMode.INVALID:
item.BackColor = Color.Red;
break;
case ResultTypeMatchedDataMode.ADD_DRIVER:
item.BackColor = Color.Yellow;
break;
case ResultTypeMatchedDataMode.NEW_LINK:
item.BackColor = Color.LightGreen;
break;
case ResultTypeMatchedDataMode.EXISTING_LINK:
item.BackColor = Color.White;
break;
}
}
}
private void CalculatePointsFromEventResult(ref ResultWrapper curr_result)
{
ulong class_position = 0;
int class_points = 0;
ulong pax_position = 0;
int pax_points = 0;
if (!curr_result.Payload.MatchedData.ignored)
{
// calculate class finishing position
class_position = 1;
int class_count = 0;
foreach (ResultWrapper opponent in results_array)
{
if ((!opponent.Payload.MatchedData.ignored) &&
(opponent.Payload.MatchedData.class_id == curr_result.Payload.MatchedData.class_id))
{
class_count++;
if (Convert.ToSingle(opponent.Payload.ImportedData.Total) < Convert.ToSingle(curr_result.Payload.ImportedData.Total))
{
class_position++;
}
}
}
// calculate class points
if (season_data.GetClass(curr_result.Payload.MatchedData.class_id).Payload.non_points)
{
class_points = 0;
}
else
{
if (class_count == 1)
{
class_points = season_data.Payload.Settings.single_entrant_class_points;
}
else
{
string[] class_points_list = season_data.Payload.Settings.class_points.Split(',');
if (class_position >= (ulong)class_points_list.LongLength)
{
class_points = Convert.ToInt32(class_points_list[class_points_list.Length-1]);
}
else
{
class_points = Convert.ToInt32(class_points_list[class_position-1]);
}
}
}
// calculate pax finishing position
pax_position = 1;
int pax_count = 0;
foreach (ResultWrapper opponent in results_array)
{
if ((!opponent.Payload.MatchedData.ignored) &&
(season_data.GetClass(opponent.Payload.MatchedData.class_id).Payload.ladies ==
season_data.GetClass(curr_result.Payload.MatchedData.class_id).Payload.ladies))
{
pax_count++;
if (Convert.ToSingle(opponent.Payload.ImportedData.Pax_Time) < Convert.ToSingle(curr_result.Payload.ImportedData.Pax_Time))
{
pax_position++;
}
}
}
// calculate pax points
if (season_data.GetClass(curr_result.Payload.MatchedData.class_id).Payload.non_points)
{
pax_points = 0;
}
else
{
if (pax_count == 1)
{
pax_points = season_data.Payload.Settings.single_entrant_pax_points;
}
else
{
string[] pax_points_list = season_data.Payload.Settings.pax_points.Split(',');
if (pax_position >= (ulong)pax_points_list.LongLength)
{
pax_points = Convert.ToInt32(pax_points_list[pax_points_list.Length-1]);
}
else
{
pax_points = Convert.ToInt32(pax_points_list[pax_position-1]);
}
}
}
}
curr_result.Payload.StandingsData.class_position = class_position;
curr_result.Payload.StandingsData.class_points = class_points;
curr_result.Payload.StandingsData.pax_position = pax_position;
curr_result.Payload.StandingsData.pax_points = pax_points;
}
//private bool MatchResultDetailsInterfaceToData_reentry_blocked = false;
private void MatchResultDetailsInterfaceToData(ref ResultWrapper curr_result)
{
//if (MatchResultDetailsInterfaceToData_reentry_blocked) return;
//MatchResultDetailsInterfaceToData_reentry_blocked = true;
abort_status_change_handler = true;
if (curr_result != null)
{
switch (curr_result.Payload.MatchedData.mode)
{
case ResultTypeMatchedDataMode.INVALID:
IgnoreDriverRadio.Enabled = true;
IgnoreDriverRadio.Checked = true;
AddDriverRadio.Enabled = false;
AddDriverRadio.Checked = false;
LinkDriverRadio.Enabled = false;
LinkDriverRadio.Checked = false;
DriverList.Enabled = false;
DriverList.SelectedIndex = -1;
break;
case ResultTypeMatchedDataMode.ADD_DRIVER:
IgnoreDriverRadio.Enabled = true;
IgnoreDriverRadio.Checked = curr_result.Payload.MatchedData.ignored;
AddDriverRadio.Enabled = true;
AddDriverRadio.Checked = !curr_result.Payload.MatchedData.ignored;
LinkDriverRadio.Enabled = (DriverList.Items.Count > 0);
LinkDriverRadio.Checked = false;
DriverList.Enabled = (DriverList.Items.Count > 0);
DriverList.SelectedIndex = -1;
break;
case ResultTypeMatchedDataMode.NEW_LINK:
IgnoreDriverRadio.Enabled = true;
IgnoreDriverRadio.Checked = curr_result.Payload.MatchedData.ignored;
AddDriverRadio.Enabled = true;
AddDriverRadio.Checked = false;
LinkDriverRadio.Enabled = (DriverList.Items.Count > 0);
LinkDriverRadio.Checked = !curr_result.Payload.MatchedData.ignored;
DriverList.Enabled = (DriverList.Items.Count > 0);
if (curr_result.Payload.MatchedData.alias != null)
{
DriverList.SelectedIndex = DriverList.Items.IndexOf(curr_result.Payload.MatchedData.alias);
}
else
{
DriverList.SelectedIndex = -1;
}
break;
case ResultTypeMatchedDataMode.EXISTING_LINK:
IgnoreDriverRadio.Enabled = true;
IgnoreDriverRadio.Checked = curr_result.Payload.MatchedData.ignored;
AddDriverRadio.Enabled = false;
AddDriverRadio.Checked = false;
LinkDriverRadio.Enabled = (DriverList.Items.Count > 0);
LinkDriverRadio.Checked = !curr_result.Payload.MatchedData.ignored;
DriverList.Enabled = false;
if (curr_result.Payload.MatchedData.alias != null)
{
DriverList.SelectedIndex = DriverList.Items.IndexOf(season_data.FindDriverByAlias(curr_result.Payload.MatchedData.alias).ToString());
}
else
{
DriverList.SelectedIndex = -1;
}
break;
}
}
abort_status_change_handler = false;
//MatchResultDetailsInterfaceToData_reentry_blocked = false;
}
//private bool MatchResultDetailsDataToInterface_reentry_blocked = false;
private void MatchResultDetailsDataToInterface(ref ResultWrapper curr_result)
{
//if (MatchResultDetailsDataToInterface_reentry_blocked) return;
//MatchResultDetailsDataToInterface_reentry_blocked = true;
if (curr_result != null)
{
if (IgnoreDriverRadio.Checked)
{
curr_result.Payload.MatchedData.ignored = true;
if (curr_result.Payload.MatchedData.mode != ResultTypeMatchedDataMode.EXISTING_LINK)
{
curr_result.Payload.MatchedData.alias = "";
}
}
else
{
curr_result.Payload.MatchedData.ignored = false;
if (AddDriverRadio.Checked)
{
curr_result.Payload.MatchedData.mode = ResultTypeMatchedDataMode.ADD_DRIVER;
curr_result.Payload.MatchedData.alias = "";
}
if (LinkDriverRadio.Checked)
{
if (curr_result.Payload.MatchedData.mode != ResultTypeMatchedDataMode.EXISTING_LINK)
{
curr_result.Payload.MatchedData.mode = ResultTypeMatchedDataMode.NEW_LINK;
curr_result.Payload.MatchedData.alias = (string)DriverList.SelectedItem;
}
}
}
}
//MatchResultDetailsDataToInterface_reentry_blocked = false;
}
private void ResultsList_SelectedIndexChanged(object sender, System.EventArgs e)
{
ResultWrapper curr_result = null;
if (ResultsList.SelectedItems.Count > 0)
{
curr_result = (ResultWrapper)(ResultsList.SelectedItems[0].Tag);
}
MatchResultDetailsInterfaceToData(ref curr_result);
}
private bool abort_status_change_handler = false;
private void ResultStatusChanged(object sender, System.EventArgs e)
{
if (abort_status_change_handler) return;
ResultWrapper curr_result = null;
if (ResultsList.SelectedItems.Count > 0)
{
curr_result = (ResultWrapper)(ResultsList.SelectedItems[0].Tag);
}
MatchResultDetailsDataToInterface(ref curr_result);
UpdateResultsList();
}
private void DriverList_SelectedIndexChanged(object sender, System.EventArgs e)
{
if (abort_status_change_handler) return;
LinkDriverRadio.Checked = true;
}
private bool ResultsList_ItemCheck_reentry_block = false;
private void ResultsList_ItemCheck(object sender, System.Windows.Forms.ItemCheckEventArgs e)
{
if (ResultsList_ItemCheck_reentry_block) return;
ResultsList_ItemCheck_reentry_block = true;
ListViewItem item = ResultsList.Items[e.Index];
ResultWrapper curr_result = (ResultWrapper)(item.Tag);
if (curr_result.Payload.MatchedData.mode == ResultTypeMatchedDataMode.INVALID)
{
e.NewValue = e.CurrentValue;
}
curr_result.Payload.MatchedData.ignored = (e.NewValue != CheckState.Checked);
UpdateResultsList();
ResultsList_ItemCheck_reentry_block = false;
}
private void ResultsList_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
{
ResultsList.ListViewItemSorter = new ResultsListSorter(e.Column, ref season_data);
}
private void Accept_Click(object sender, System.EventArgs e)
{
ResultWrapper curr_result;
for (int i=0; i<results_array.Count; i++)
{
curr_result = (ResultWrapper)results_array[i];
if (curr_result.Payload.MatchedData.ignored) continue;
switch (curr_result.Payload.MatchedData.mode)
{
case ResultTypeMatchedDataMode.ADD_DRIVER:
{
string alias = curr_result.Payload.ImportedData.First_Name + " " + curr_result.Payload.ImportedData.Last_Name;
season_data.AddNewDriver(curr_result.Payload.ImportedData.First_Name, curr_result.Payload.ImportedData.Last_Name, curr_result.Payload.ImportedData.Car, alias);
season_data.FindDriverByAlias(alias).UpdatePoints(event_data.Payload.number, curr_result.Payload.MatchedData.class_id, curr_result.Payload.StandingsData.class_points, curr_result.Payload.StandingsData.pax_points);
}
break;
case ResultTypeMatchedDataMode.NEW_LINK:
{
string alias = curr_result.Payload.ImportedData.First_Name + " " + curr_result.Payload.ImportedData.Last_Name;
DriverWrapper found_driver = season_data.FindDriverByCombinedName(curr_result.Payload.MatchedData.alias);
if (found_driver != null)
{
found_driver.AddAlias(alias);
found_driver.UpdatePoints(event_data.Payload.number, curr_result.Payload.MatchedData.class_id, curr_result.Payload.StandingsData.class_points, curr_result.Payload.StandingsData.pax_points);
}
}
break;
case ResultTypeMatchedDataMode.EXISTING_LINK:
{
season_data.FindDriverByAlias(curr_result.Payload.MatchedData.alias).UpdatePoints(event_data.Payload.number, curr_result.Payload.MatchedData.class_id, curr_result.Payload.StandingsData.class_points, curr_result.Payload.StandingsData.pax_points);
}
break;
}
}
season_data.Payload.DocState.modified = true;
Close();
}
}
}
using System;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.Collections;
using System.Windows.Forms;
namespace SeasonManager
{
/// <summary>
/// Summary description for Utils.
/// </summary>
public class Utils
{
public const string EXCEPTION_LOG = "exception.log";
private static XmlDocument m_xmldoc = new XmlDocument();
public Utils()
{
}
public static bool WriteToFlatLog(string filename, string message, bool timestamp, bool append)
{
bool result = true;
try
{
System.IO.StreamWriter sw = new System.IO.StreamWriter(filename, append);
if (timestamp)
{
sw.WriteLine(DateTime.Now.ToLongTimeString());
}
sw.WriteLine(message);
sw.WriteLine("");
sw.Close();
}
catch (Exception ex)
{
result = false;
WriteToFlatLog("exception.log", ex.ToString(), true, true);
}
return result;
}
public static bool ParseXML(string xml, out XmlElement xmlel)
{
bool result;
xmlel = null;
try
{
XmlDocument parse_doc = new XmlDocument();
parse_doc.LoadXml(xml);
xmlel = (XmlElement)m_xmldoc.ImportNode((XmlNode)parse_doc.DocumentElement, true);
result = true;
}
catch (Exception e)
{
Utils.WriteToFlatLog(EXCEPTION_LOG, e.ToString(), true, true);
result = false;
}
return result;
}
public static bool SerializeObject(object o, out string xml)
{
bool result = false;
xml = "";
if (o != null)
{
try
{
XmlSerializer s = new XmlSerializer(o.GetType());
StringWriter w = new StringWriter();
s.Serialize(w, o);
xml = w.ToString();
w.Close();
result = true;
}
catch (Exception e)
{
Utils.WriteToFlatLog(Utils.EXCEPTION_LOG, e.ToString(), true, true);
result = false;
}
}
return result;
}
public static bool DeserializeObject(string xml, ref object o)
{
bool result = false;
if (o != null)
{
try
{
XmlSerializer s = new XmlSerializer(o.GetType());
StringReader r = new StringReader(xml);
o = Convert.ChangeType(s.Deserialize(r), o.GetType());
r.Close();
result = true;
}
catch (Exception e)
{
Utils.WriteToFlatLog(Utils.EXCEPTION_LOG, e.ToString(), true, true);
o = null;
result = false;
}
}
return result;
}
public static bool ElementizeObject(object o, out XmlElement xmlel)
{
bool result = false;
xmlel = null;
if (o != null)
{
try
{
string xml;
if (SerializeObject(o, out xml))
{
if (ParseXML(xml, out xmlel))
{
result = true;
}
else
{
result = false;
}
}
else
{
result = false;
}
}
catch (Exception e)
{
Utils.WriteToFlatLog(Utils.EXCEPTION_LOG, e.ToString(), true, true);
result = false;
}
}
return result;
}
public static bool DeelementizeObject(XmlElement xmlel, ref object o)
{
bool result = false;
if (xmlel != null)
{
result = DeserializeObject(xmlel.OuterXml, ref o);
}
return result;
}
public static Array AppendElement(Array array, object element)
{
ArrayList new_array = new ArrayList();
new_array.AddRange(array);
new_array.Add(element);
return new_array.ToArray(element.GetType());
/*
Array new_array = Array.CreateInstance(element.GetType(), array.Length + 1);
array.CopyTo(new_array, 0);
new_array.SetValue(element, new_array.Length-1);
array = new_array;
*/
}
public static ArrayList ParseResultsFile(EventType event_data)
{
ArrayList results_array = new ArrayList();
try
{
StreamReader sr = new StreamReader(event_data.data_file);
ArrayList column_headers = new ArrayList();
column_headers.AddRange(sr.ReadLine().Split('\t'));
string curr_line = sr.ReadLine();
while (curr_line != null)
{
string[] curr_data_fields = curr_line.Split('\t');
ResultWrapper curr_result = new ResultWrapper();
curr_result.Payload.ImportedData.Car = curr_data_fields[column_headers.IndexOf("Car Model")];
curr_result.Payload.ImportedData.Class = curr_data_fields[column_headers.IndexOf("Class")];
curr_result.Payload.ImportedData.First_Name = curr_data_fields[column_headers.IndexOf("First Name")];
curr_result.Payload.ImportedData.Last_Name = curr_data_fields[column_headers.IndexOf("Last Name")];
try
{
curr_result.Payload.ImportedData.Pax_Time = Convert.ToSingle(curr_data_fields[column_headers.IndexOf("Pax Time")]);
}
catch (FormatException)
{
curr_result.Payload.ImportedData.Pax_Time = 999.999f;
}
try
{
curr_result.Payload.ImportedData.Total = Convert.ToSingle(curr_data_fields[column_headers.IndexOf("Total")]);
}
catch (FormatException)
{
curr_result.Payload.ImportedData.Pax_Time = 999.999f;
}
int run_index = 1;
string run_header_string = "Run 1";
string pen_header_string = "Pen 1";
while (column_headers.IndexOf(run_header_string) != -1)
{
RunType curr_run = new RunType();
try
{
curr_run.time = Convert.ToSingle(curr_data_fields[column_headers.IndexOf(run_header_string)]);
}
catch (FormatException)
{
curr_run.time = 999.999f;
}
try
{
curr_run.cone_count = Convert.ToInt32(curr_data_fields[column_headers.IndexOf(pen_header_string)]);
curr_run.penalty = "";
}
catch (FormatException)
{
curr_run.cone_count = 0;
curr_run.penalty = curr_data_fields[column_headers.IndexOf(pen_header_string)];
}
curr_result.Payload.ImportedData.Runs = (RunType[])Utils.AppendElement(curr_result.Payload.ImportedData.Runs, curr_run);
}
results_array.Add(curr_result);
curr_line = sr.ReadLine();
}
sr.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error Parsing Results File");
}
return results_array;
}
}
public class ResultsListSorter : IComparer
{
private int col;
private SeasonWrapper season_data;
public ResultsListSorter()
{
col = 0;
season_data = null;
}
public ResultsListSorter(int column, ref SeasonWrapper sw)
{
col = column;
season_data = sw;
}
public int Compare(object x, object y)
{
int rval = 0;
ResultWrapper res_x = (ResultWrapper)((ListViewItem)x).Tag;
ResultWrapper res_y = (ResultWrapper)((ListViewItem)y).Tag;
switch (col)
{
case 0: // by class then by class position
case 2:
rval = String.Compare(res_x.Payload.MatchedData.class_id, res_y.Payload.MatchedData.class_id);
if (rval == 0)
{
rval = res_y.Payload.StandingsData.class_points - res_x.Payload.StandingsData.class_points;
}
break;
case 3: // by pax position
if (season_data.GetClass(res_x.Payload.MatchedData.class_id).Payload.ladies ==
season_data.GetClass(res_y.Payload.MatchedData.class_id).Payload.ladies)
{
rval = ((ResultWrapper)((ListViewItem)y).Tag).Payload.StandingsData.pax_points - ((ResultWrapper)((ListViewItem)x).Tag).Payload.StandingsData.pax_points;
}
else
{
rval = season_data.GetClass(res_x.Payload.MatchedData.class_id).Payload.ladies ? 1 : -1;
}
break;
case 8: // by time
case 9:
rval = (int)((Convert.ToSingle(((ListViewItem)x).SubItems[col].Text) - Convert.ToSingle(((ListViewItem)y).SubItems[col].Text)) * 1000);
break;
default:
rval = String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
break;
}
return rval;
}
}
public class StandingsListSorter : IComparer
{
private int col;
private SeasonWrapper season_data;
public StandingsListSorter()
{
col = 0;
season_data = null;
}
public StandingsListSorter(int column, ref SeasonWrapper sw)
{
col = column;
season_data = sw;
}
public int Compare(object x, object y)
{
int rval = 0;
string text_x = ((ListViewItem)x).SubItems[col].Text;
string text_y = ((ListViewItem)y).SubItems[col].Text;
DriverWrapper driver_x = (DriverWrapper)((ListViewItem)x).Tag;
DriverWrapper driver_y = (DriverWrapper)((ListViewItem)y).Tag;
switch (col)
{
case 0: // by class then by class position
case 3:
char[] delimiters = " (/)".ToCharArray();
string[] standings_x = ((ListViewItem)x).SubItems[3].Text.Split(delimiters, 10);
string[] standings_y = ((ListViewItem)y).SubItems[3].Text.Split(delimiters, 10);
rval = String.Compare(((ListViewItem)x).SubItems[0].Text, ((ListViewItem)y).SubItems[0].Text);
if (rval == 0)
{
rval = Convert.ToInt32(standings_y[3]) - Convert.ToInt32(standings_x[3]);
}
if (rval == 0)
{
rval = Convert.ToInt32(standings_y[2]) - Convert.ToInt32(standings_x[2]);
}
break;
default:
rval = String.Compare(text_x, text_y);
break;
}
return rval;
}
}
}
using System;
using System.IO;
using System.Xml;
using System.Collections;
namespace SeasonManager
{
public class SeasonWrapper
{
public const string DEFAULT_SEASON_NAME = "New Solo2 Season";
public const string DEFAULT_CLUB_NAME = "Reno SCCA";
public const string DEFAULT_CLASS_POINTS = "21,16,14,12,11,10,9,8,7,6,5,4,3,2,1,0";
public const string DEFAULT_PAX_POINTS = "21,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1";
public const uint DEFAULT_EVENT_COUNT = 15;
public const uint DEFAULT_MIN_EVENT_COUNT = 8;
public const uint DEFAULT_DROP_COUNT = 4;
public SeasonType Payload = null;
public SeasonWrapper()
{
Payload = new SeasonType();
Payload.DocState = new DocStateType();
Payload.Settings = new SettingsType();
Payload.Classes = new ClassType[] {};
Payload.Events = new EventType[] {};
Payload.Drivers = new DriverType[] {};
}
public bool LoadDefaults()
{
bool result;
try
{
Payload = new SeasonType();
Payload.DocState = new DocStateType();
Payload.Settings = new SettingsType();
Payload.Classes = new ClassType[] {};
Payload.Events = new EventType[] {};
Payload.Drivers = new DriverType[] {};
Payload.name = DEFAULT_SEASON_NAME;
Payload.club = DEFAULT_CLUB_NAME;
Payload.Settings.class_points = DEFAULT_CLASS_POINTS;
Payload.Settings.pax_points = DEFAULT_PAX_POINTS;
Payload.Settings.event_count = DEFAULT_EVENT_COUNT;
Payload.Settings.min_event_count = DEFAULT_MIN_EVENT_COUNT;
Payload.Settings.drop_count = DEFAULT_DROP_COUNT;
result = true;
}
catch (Exception e)
{
Utils.WriteToFlatLog(Utils.EXCEPTION_LOG, e.ToString(), true, true);
result = false;
}
return result;
}
public bool SaveToFile(string filename)
{
bool result;
try
{
string xml;
if (Utils.SerializeObject(Payload, out xml))
{
StreamWriter w = new StreamWriter(filename, false);
w.Write(xml);
w.Close();
Payload.DocState.filename = filename;
result = true;
}
else
{
result = false;
}
}
catch (Exception e)
{
Utils.WriteToFlatLog(Utils.EXCEPTION_LOG, e.ToString(), true, true);
result = false;
}
return result;
}
public bool LoadFromFile(string filename)
{
bool result;
try
{
StreamReader r = new StreamReader(filename);
string xml = r.ReadToEnd();
r.Close();
object new_payload = new SeasonType();
if (Utils.DeserializeObject(xml, ref new_payload))
{
Payload = (SeasonType)new_payload;
Payload.DocState.filename = filename;
result = true;
}
else
{
result = false;
}
}
catch (Exception e)
{
Utils.WriteToFlatLog(Utils.EXCEPTION_LOG, e.ToString(), true, true);
result = false;
}
return result;
}
public override string ToString()
{
return Payload.name;
}
public void AddNewDriver(string first_name, string last_name, string car, string alias)
{
DriverWrapper new_driver = new DriverWrapper();
new_driver.Payload.first_name = first_name;
new_driver.Payload.last_name = last_name;
new_driver.Payload.car = car;
new_driver.AddAlias(alias);
DriverType[] new_drivers = new DriverType[Payload.Drivers.Length + 1];
Payload.Drivers.CopyTo(new_drivers, 0);
Payload.Drivers = new_drivers;
Payload.Drivers.SetValue(new_driver.Payload, Payload.Drivers.Length-1);
/*
XmlElement season_xmlel;
XmlElement driver_xmlel;
if (Utils.ElementizeObject(Payload, out season_xmlel))
{
string xml = "<Driver>" +
" <first_name>" + first_name + "</first_name>" +
" <last_name>" + last_name + "</last_name>" +
" <car>" + car + "</car>" +
" <Aliases>" +
" <alias>" + alias + "</Alias>" +
" </Aliases>" +
" </Points>" +
"</Driver>";
Utils.ParseXML(xml, out driver_xmlel);
season_xmlel.SelectSingleNode("./Drivers").AppendChild(driver_xmlel);
object out_payload = null;
Utils.DeelementizeObject(season_xmlel, out out_payload);
Payload = (SeasonType)out_payload;
}
*/
}
public DriverWrapper FindDriverByAlias(string alias)
{
DriverWrapper rval = null;
for (int i=0; i<Payload.Drivers.Length; i++)
{
DriverType curr_driver = Payload.Drivers[i];
foreach (string curr_alias in curr_driver.Aliases)
{
if (curr_alias.ToUpper() == alias.ToUpper())
{
rval = new DriverWrapper(ref curr_driver);
break; // out of foreach(alias)
}
}
if (rval != null)
{
break; // out of for(i)
}
}
return rval;
}
public DriverWrapper FindDriverByName(string first_name, string last_name)
{
DriverWrapper rval = null;
for (int i=0; i<Payload.Drivers.Length; i++)
{
DriverType curr_driver = Payload.Drivers[i];
if ((curr_driver.first_name.ToUpper() == first_name.ToUpper()) && (curr_driver.last_name.ToUpper() == last_name.ToUpper()))
{
rval = new DriverWrapper(ref curr_driver);
break; // out of for(i)
}
}
return rval;
}
public DriverWrapper FindDriverByCombinedName(string name)
{
DriverWrapper rval = null;
for (int i=0; i<Payload.Drivers.Length; i++)
{
DriverType curr_driver = Payload.Drivers[i];
if (curr_driver.first_name.ToUpper() + " " + curr_driver.last_name.ToUpper() == name.ToUpper())
{
rval = new DriverWrapper(ref curr_driver);
break; // out of for(i)
}
}
return rval;
}
public ClassWrapper FindClassByImportedID(string imported_id)
{
ClassWrapper rval = null;
// do a simple check
if (rval == null)
{
for (int i=0; i<Payload.Classes.Length; i++)
{
ClassType curr_class = Payload.Classes[i];
if (imported_id.ToUpper() == curr_class.id.ToUpper())
{
rval = new ClassWrapper(ref curr_class);
break; // out of for(i)
}
}
}
// do a starts-with check (to find PAX classes)
if (rval == null)
{
int matched_length = 0;
for (int i=0; i<Payload.Classes.Length; i++)
{
ClassType curr_class = Payload.Classes[i];
if ((imported_id.ToUpper().StartsWith(curr_class.id.ToUpper()) &&
(curr_class.id.ToUpper().Length > matched_length)))
{
rval = new ClassWrapper(ref curr_class);
matched_length = curr_class.id.ToUpper().Length;
}
}
}
return rval;
}
public ClassWrapper GetClass(string class_id)
{
ClassWrapper rval = null;
for (int i=0; i<Payload.Classes.Length; i++)
{
if (Payload.Classes[i].id == class_id)
{
rval = new ClassWrapper(ref Payload.Classes[i]);
break; // out of for(i)
}
}
return rval;
}
public void GetClassStandings(DriverWrapper driver, string class_id, bool exclude_nonqualified, out int position_with_drops, out int point_total, out int point_total_with_drops, out bool qualified)
{
position_with_drops = 0;
point_total = 0;
point_total_with_drops = 0;
qualified = false;
if (driver != null)
{
position_with_drops = 1;
point_total = driver.GetClassPointsTotal(class_id, 0, Payload.Settings.event_count);
point_total_with_drops = driver.GetClassPointsTotal(class_id, Payload.Settings.drop_count, Payload.Settings.event_count);
qualified = driver.GetClassQualifiedStatus(class_id, Payload.Settings.min_event_count);
for (int i=0; i<Payload.Drivers.Length; i++)
{
DriverWrapper opponent = new DriverWrapper(ref Payload.Drivers[i]);
if ((point_total_with_drops < opponent.GetClassPointsTotal(class_id, Payload.Settings.drop_count, Payload.Settings.event_count)) &&
(opponent.GetClassQualifiedStatus(class_id, Payload.Settings.min_event_count) || !exclude_nonqualified))
{
position_with_drops++;
}
}
}
}
public void GetPaxStandings(DriverWrapper driver, bool ladies, bool exclude_nonqualified, out int position_with_drops, out int point_total, out int point_total_with_drops, out bool qualified)
{
position_with_drops = 0;
point_total = 0;
point_total_with_drops = 0;
qualified = false;
if (driver != null)
{
position_with_drops = 1;
point_total = driver.GetPaxPointsTotal(ladies, 0, Payload.Settings.event_count, this);
point_total_with_drops = driver.GetPaxPointsTotal(ladies, Payload.Settings.drop_count, Payload.Settings.event_count, this);
qualified = driver.GetPaxQualifiedStatus(ladies, Payload.Settings.min_event_count, this);
for (int i=0; i<Payload.Drivers.Length; i++)
{
DriverWrapper opponent = new DriverWrapper(ref Payload.Drivers[i]);
if ((point_total_with_drops < opponent.GetPaxPointsTotal(ladies, Payload.Settings.drop_count, Payload.Settings.event_count, this)) &&
(opponent.GetPaxQualifiedStatus(ladies, Payload.Settings.min_event_count, this) || !exclude_nonqualified))
{
position_with_drops++;
}
}
}
}
}
public class ClassWrapper
{
public ClassType Payload = new ClassType();
public ClassWrapper(ref ClassType payload)
{
Payload = payload;
}
public override string ToString()
{
return Payload.id;
}
}
public class EventWrapper
{
public EventType Payload = new EventType();
public EventWrapper(ref EventType payload)
{
Payload = payload;
}
public override string ToString()
{
return Payload.data_file;
}
}
public class DriverWrapper
{
public DriverType Payload;
public DriverWrapper()
{
Payload = new DriverType();
Payload.Aliases = new string[] {};
Payload.Points = new PointsType[] {};
}
public DriverWrapper(ref DriverType payload)
{
Payload = payload;
}
public override string ToString()
{
return Payload.first_name + " " + Payload.last_name;
}
public void UpdatePoints(ulong event_number, string class_id, int class_amount, int pax_amount)
{
PointsType points = null;
for (int i=0; i<Payload.Points.Length; i++)
{
if (Payload.Points[i].event_number == event_number)
{
points = Payload.Points[i];
break; // out of for(i)
}
}
if (points == null)
{
points = new PointsType();
points.event_number = event_number;
Payload.Points = (PointsType[])Utils.AppendElement(Payload.Points, points);
}
points.class_id = class_id;
points.class_amount = class_amount;
points.pax_amount = pax_amount;
}
public void AddAlias(string alias)
{
string[] new_aliases = new string[Payload.Aliases.Length + 1];
Payload.Aliases.CopyTo(new_aliases, 0);
Payload.Aliases = new_aliases;
Payload.Aliases.SetValue(alias, Payload.Aliases.Length - 1);
}
public int GetClassPointsTotal(string class_id, uint drops, uint season_event_count)
{
int rval = 0;
int drops_taken = 0;
int[] drops_array = new int[drops];
Array.Clear(drops_array, 0, (int)drops);
uint event_count = 0;
PointsType points = null;
for (int i=0; i<Payload.Points.Length; i++)
{
points = Payload.Points[i];
if (points.class_id.ToUpper() == class_id.ToUpper())
{
event_count++;
if (drops_taken < drops)
{
drops_array[drops_taken] = points.class_amount;
drops_taken++;
}
else
{
Array.Sort(drops_array);
Array.Reverse(drops_array);
for (int j=0; j<drops; j++)
{
if (points.class_amount < drops_array[j])
{
drops_array[j] = points.class_amount;
break;
}
}
}
rval += points.class_amount;
}
}
drops_taken -= (int)(season_event_count - event_count);
Array.Sort(drops_array);
for (int i=0; i<drops_taken; i++)
{
rval -= drops_array[i];
}
return rval;
}
public int GetPaxPointsTotal(bool ladies, uint drops, uint season_event_count, SeasonWrapper season_data)
{
int rval = 0;
int drops_taken = 0;
int[] drops_array = new int[drops];
Array.Clear(drops_array, 0, (int)drops);
uint event_count = 0;
PointsType points = null;
for (int i=0; i<Payload.Points.Length; i++)
{
points = Payload.Points[i];
if (season_data.GetClass(points.class_id).Payload.ladies == ladies)
{
event_count++;
if (drops_taken < drops)
{
drops_array[drops_taken] = points.pax_amount;
drops_taken++;
}
else
{
Array.Sort(drops_array);
Array.Reverse(drops_array);
for (int j=0; j<drops; j++)
{
if (points.class_amount < drops_array[j])
{
drops_array[j] = points.pax_amount;
break;
}
}
}
rval += points.pax_amount;
}
}
drops_taken -= (int)(season_event_count - event_count);
Array.Sort(drops_array);
for (int i=0; i<drops_taken; i++)
{
rval -= drops_array[i];
}
return rval;
}
public bool GetClassQualifiedStatus(string class_id, uint required_events)
{
uint event_count = 0;
PointsType points = null;
for (int i=0; i<Payload.Points.Length; i++)
{
points = Payload.Points[i];
if (points.class_id.ToUpper() == class_id.ToUpper())
{
event_count++;
}
}
return (event_count >= required_events);
}
public bool GetPaxQualifiedStatus(bool ladies, uint required_events, SeasonWrapper season_data)
{
uint event_count = 0;
PointsType points = null;
for (int i=0; i<Payload.Points.Length; i++)
{
points = Payload.Points[i];
if (season_data.GetClass(points.class_id).Payload.ladies == ladies)
{
event_count++;
}
}
return (event_count >= required_events);
}
}
public class ResultWrapper
{
public ResultType Payload = new ResultType();
public ResultWrapper()
{
Payload = new ResultType();
Payload.ImportedData = new ResultTypeImportedData();
Payload.MatchedData = new ResultTypeMatchedData();
Payload.StandingsData = new ResultTypeStandingsData();
}
public ResultWrapper(ref ResultType payload)
{
Payload = payload;
}
}
}
//------------------------------------------------------------------------------
// <autogenerated>
// This code was generated by a tool.
// Runtime Version: 1.1.4322.2032
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </autogenerated>
//------------------------------------------------------------------------------
//
// This source code was auto-generated by xsd, Version=1.1.4322.2032.
//
namespace SeasonManager {
using System.Xml.Serialization;
/// <remarks/>
[System.Xml.Serialization.XmlRootAttribute("Season", Namespace="", IsNullable=false)]
public class SeasonType {
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("New Season")]
public string name = "New Season";
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("")]
public string club = "";
/// <remarks/>
public DocStateType DocState;
/// <remarks/>
public SettingsType Settings;
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("Class", IsNullable=false)]
public ClassType[] Classes;
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("Event", IsNullable=false)]
public EventType[] Events;
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("Driver", IsNullable=false)]
public DriverType[] Drivers;
}
/// <remarks/>
public class DocStateType {
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(false)]
public bool modified = false;
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("")]
public string filename = "";
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(typeof(System.UInt64), "0")]
public System.UInt64 next_id = ((System.UInt64)(0m));
}
/// <remarks/>
public class PointsType {
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("")]
public string class_id = "";
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(typeof(System.UInt64), "0")]
public System.UInt64 event_number = ((System.UInt64)(0m));
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(0)]
public int class_amount = 0;
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(0)]
public int pax_amount = 0;
}
/// <remarks/>
public class DriverType {
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("New")]
public string first_name = "New";
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("Driver")]
public string last_name = "Driver";
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("alias", IsNullable=false)]
public string[] Aliases;
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("")]
public string car = "";
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("Points", IsNullable=false)]
public PointsType[] Points;
}
/// <remarks/>
public class EventType {
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("New Event")]
public string name = "New Event";
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("")]
public string date = "";
/// <remarks/>
public System.UInt64 number;
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("")]
public string data_file = "";
}
/// <remarks/>
public class PrefixModifierType {
/// <remarks/>
public string prefix;
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(typeof(System.Single), "1")]
public System.Single modifier = ((System.Single)(1F));
}
/// <remarks/>
public class ClassType {
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("NEW")]
public string id = "NEW";
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("New Class")]
public string description = "New Class";
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(false)]
public bool ladies = false;
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(false)]
public bool non_points = false;
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(false)]
public bool pax_class = false;
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("PrefixModifier", IsNullable=false)]
public PrefixModifierType[] PrefixModifiers;
}
/// <remarks/>
public class SettingsType {
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("10,8,6,5,4,3,2,1,0")]
public string class_points = "10,8,6,5,4,3,2,1,0";
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(5)]
public int single_entrant_class_points = 5;
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("10,8,6,5,4,3,2,1")]
public string pax_points = "10,8,6,5,4,3,2,1";
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(10)]
public int single_entrant_pax_points = 10;
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(typeof(System.UInt32), "0")]
public System.UInt32 event_count = ((System.UInt32)(0));
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(typeof(System.UInt32), "0")]
public System.UInt32 min_event_count = ((System.UInt32)(0));
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(typeof(System.UInt32), "0")]
public System.UInt32 drop_count = ((System.UInt32)(0));
}
/// <remarks/>
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public class ImportedResults {
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Result")]
public ResultType[] Result;
}
/// <remarks/>
public class ResultType {
/// <remarks/>
public ResultTypeImportedData ImportedData;
/// <remarks/>
public ResultTypeMatchedData MatchedData;
/// <remarks/>
public ResultTypeStandingsData StandingsData;
}
/// <remarks/>
public class ResultTypeImportedData {
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("")]
public string Class = "";
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("Unknown")]
public string First_Name = "Unknown";
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("Driver")]
public string Last_Name = "Driver";
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("")]
public string Car = "";
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(typeof(System.Single), "999.999")]
public System.Single Total = ((System.Single)(999.999F));
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(typeof(System.Single), "999.999")]
public System.Single Pax_Time = ((System.Single)(999.999F));
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("Run", IsNullable=false)]
public RunType[] Runs;
}
/// <remarks/>
public class RunType {
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(typeof(System.Single), "999.999")]
public System.Single time = ((System.Single)(999.999F));
/// <remarks/>
public string penalty;
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(0)]
public int cone_count = 0;
}
/// <remarks/>
public class ResultTypeMatchedData {
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute("")]
public string class_id = "";
/// <remarks/>
public string alias;
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(ResultTypeMatchedDataMode.INVALID)]
public ResultTypeMatchedDataMode mode = ResultTypeMatchedDataMode.INVALID;
/// <remarks/>
public bool ignored;
}
/// <remarks/>
public enum ResultTypeMatchedDataMode {
/// <remarks/>
INVALID,
/// <remarks/>
ADD_DRIVER,
/// <remarks/>
NEW_LINK,
/// <remarks/>
EXISTING_LINK,
}
/// <remarks/>
public class ResultTypeStandingsData {
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(typeof(System.UInt64), "0")]
public System.UInt64 class_position = ((System.UInt64)(0m));
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(0)]
public int class_points = 0;
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(typeof(System.UInt64), "0")]
public System.UInt64 pax_position = ((System.UInt64)(0m));
/// <remarks/>
[System.ComponentModel.DefaultValueAttribute(0)]
public int pax_points = 0;
}
}
Why don't you just go and finish up the changes for generating individual event reports and fix the calculation for the new Street Tire rules for me, since my 9 to 5 (occationally 8am to 1am) job of server software development is taking up too much of my time.
__________________
Is you is, or is you ain't, my con-stit-u-ints?
|