private void btnNewEvent_Click(object sender, EventArgs e)
        {
            var selectedType = EventType.Unknown;
            using (var typeDialog = new frmEventType())
            {
                if (typeDialog.ShowDialog() == DialogResult.Cancel) return;
                selectedType = typeDialog.Value;
            }

            if (selectedType == EventType.Tournament)
            {
                Tournament tournament = null;
                while (true)
                {
                    using (var dialog = new frmTournamentOptions(tournament))
                    {
                        if (dialog.ShowDialog() == DialogResult.OK)
                        {
                            tournament = dialog.Tournament;

                            League checkLeague = Config.Settings.GetLeague(dialog.Name);
                            Tournament checkTournament = Config.Settings.GetTournament(dialog.Name);
                            if (checkTournament != null || checkLeague != null)
                                if (MessageBox.Show("An event with the name \"" + tournament.Name + "\" already " +
                                                    "exists. Event names must be unique.", "Validation Error",
                                                    MessageBoxButtons.RetryCancel,
                                                    MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) ==
                                    DialogResult.Cancel)
                                    return;
                                else
                                    continue;

                            Config.Settings.Tournaments.Add(tournament);
                            Config.Settings.SaveEvents();

                            lstEvents.BeginUpdate();

                            var item = new ListViewItem();
                            item.Name = tournament.Name;
                            item.Text = tournament.Name;
                            item.SubItems.Add("Tournament");
                            item.SubItems.Add(tournament.Location);
                            item.SubItems.Add(tournament.Date.ToShortDateString());
                            item.SubItems.Add(tournament.Players.Count.ToString());
                            item.SubItems.Add("Not Started");
                            lstEvents.Items.Add(item);

                            lstEvents.Sort();
                            lstEvents.EndUpdate();

                            // Show the Add Players screen if wanted.
                            if (!btnShowAddPlayers.Checked) return;
                            var args = new TournamentPlayersEventArgs(tournament.Name, tournament.Players, tournament.PlayerFaction,
                                                                      PlayersAdded);

                            var addPlayersDialog = new FrmTournamentPlayers(args);
                            addPlayersDialog.MdiParent = MdiParent;
                            addPlayersDialog.Show();
                            ActivePlayersWindows.Add(addPlayersDialog);

                            return;
                        }
                        else
                            return;
                    }
                }
            }
            else if (selectedType == EventType.League)
            {
                League league = null;
                while (true)
                {
                    using (var dialog = new frmLeagueOptions(league))
                    {
                        if (dialog.ShowDialog() == DialogResult.OK)
                        {
                            league = dialog.League;
                            League checkLeague = Config.Settings.GetLeague(dialog.Name);
                            Tournament checkTournament = Config.Settings.GetTournament(dialog.Name);
                            if (checkTournament != null || checkLeague != null)
                                if (MessageBox.Show("An event with the name \"" + league.Name + "\" already " +
                                                    "exists. Event names must be unique.", "Validation Error",
                                                    MessageBoxButtons.RetryCancel,
                                                    MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) ==
                                    DialogResult.Cancel)
                                    return;
                                else
                                    continue;

                            Config.Settings.Leagues.Add(league);
                            Config.Settings.SaveEvents();

                            lstEvents.BeginUpdate();

                            var item = new ListViewItem();
                            item.Name = league.Name;
                            item.Text = league.Name;
                            item.SubItems.Add("League");
                            item.SubItems.Add(league.Location);
                            item.SubItems.Add(league.StartDate.ToShortDateString());
                            item.SubItems.Add(league.Players.Count.ToString());
                            item.SubItems.Add("Not Started");
                            lstEvents.Items.Add(item);

                            lstEvents.Sort();
                            lstEvents.EndUpdate();

                            return;
                        }
                        else
                            return;
                    }
                }
            }
        }
        private void editOptionsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (lstEvents.SelectedItems[0].SubItems[1].Text == "Tournament")
            {
                Tournament tournament = Config.Settings.GetTournament(lstEvents.SelectedItems[0].Text);
                using (var dialog = new frmTournamentOptions(tournament, false))
                {
                    if (dialog.ShowDialog() == DialogResult.OK)
                    {
                        int index = Config.Settings.Tournaments.IndexOf(tournament);
                        Config.Settings.Tournaments[index] = dialog.Tournament;
                        Config.Settings.SaveEvents();

                        lstEvents.BeginUpdate();

                        lstEvents.SelectedItems[0].Text = tournament.Name;
                        lstEvents.SelectedItems[0].SubItems[2].Text = tournament.Location;
                        lstEvents.SelectedItems[0].SubItems[3].Text = tournament.Date.ToShortDateString();
                        lstEvents.SelectedItems[0].SubItems[4].Text = tournament.Players.Count.ToString();
                        if (tournament.Rounds.Count == 0)
                            lstEvents.SelectedItems[0].SubItems[5].Text = "Not Started";
                        else if (tournament.Rounds.Count == tournament.TotalRounds &&
                                 tournament.Rounds[tournament.TotalRounds - 1].Completed)
                            lstEvents.SelectedItems[0].SubItems[5].Text = "Finished";
                        else
                        {
                            int roundNum = tournament.Rounds.Count;
                            if (tournament.Rounds[roundNum - 1].Completed)
                                lstEvents.SelectedItems[0].SubItems[5].Text = "Round " + roundNum.ToString() +
                                                                              " of " +
                                                                              tournament.TotalRounds.ToString() +
                                                                              " Done";
                            else
                                lstEvents.SelectedItems[0].SubItems[5].Text = "Round " + roundNum.ToString() +
                                                                              " of " +
                                                                              tournament.TotalRounds.ToString() +
                                                                              " Active";
                        }

                        lstEvents.Sort();
                        lstEvents.EndUpdate();
                    }
                }
            }
            else
            {
                var pastReference = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);
                League league = Config.Settings.GetLeague(lstEvents.SelectedItems[0].Text);
                using (var dialog = new frmLeagueOptions(league, false))
                {
                    if (dialog.ShowDialog() == DialogResult.OK)
                    {
                        int index = Config.Settings.Leagues.IndexOf(league);
                        Config.Settings.Leagues[index] = dialog.League;
                        Config.Settings.SaveEvents();

                        lstEvents.BeginUpdate();
                        lstEvents.SelectedItems[0].Text = league.Name;
                        lstEvents.SelectedItems[0].SubItems[2].Text = league.Location;
                        lstEvents.SelectedItems[0].SubItems[3].Text = league.StartDate.ToShortDateString();
                        lstEvents.SelectedItems[0].SubItems[4].Text = league.Players.Count.ToString();
                        if (league.MatchesPlayed.Count == 0)
                            lstEvents.SelectedItems[0].SubItems[5].Text = "Not Started";
                        else if (league.EndDate < pastReference)
                            lstEvents.SelectedItems[0].SubItems[5].Text = "Finished";
                        else
                        {
                            lstEvents.SelectedItems[0].SubItems[5].Text = league.MatchesPlayed.Count.ToString() +
                                                                          " Result" +
                                                                          (league.MatchesPlayed.Count == 1 ? "" : "s") +
                                                                          " Entered";
                        }

                        lstEvents.Sort();
                        lstEvents.EndUpdate();
                    }
                }
            }
        }
        private void btnNewTournament_Click(object sender, EventArgs e)
        {
            var selectedType = EventType.Unknown;
            using (var typeDialog = new frmEventType())
            {
                if (typeDialog.ShowDialog() == DialogResult.Cancel) return;
                selectedType = typeDialog.Value;
            }

            if (selectedType == EventType.Tournament)
            {
                Tournament tournament = null;
                while (true)
                {
                    using (var dialog = new frmTournamentOptions(tournament))
                    {
                        if (dialog.ShowDialog() == DialogResult.OK)
                        {
                            tournament = dialog.Tournament;

                            Tournament checkTournament = Config.Settings.GetTournament(tournament.Name);
                            if (checkTournament != null)
                                if (MessageBox.Show("A tournament with the name \"" + tournament.Name + "\" already " +
                                                    "exists. Tournament names must be unique.", "Validation Error",
                                                    MessageBoxButtons.RetryCancel,
                                                    MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) ==
                                    DialogResult.Cancel)
                                    return;
                                else
                                    continue;

                            Config.Settings.Tournaments.Add(tournament);
                            Config.Settings.SaveEvents();

                            foreach (Form form in MdiChildren)
                                if (form is frmEventsList)
                                {
                                    ((frmEventsList) form).FilterList();
                                    break;
                                }

                            return;
                        }
                        else
                            return;
                    }
                }
            }
            else
            {
            }
            League league = null;
            while (true)
            {
                using (var dialog = new frmLeagueOptions(league))
                {
                    if (dialog.ShowDialog() == DialogResult.OK)
                    {
                        league = dialog.League;
                        League checkLeague = Config.Settings.GetLeague(dialog.Name);
                        Tournament checkTournament = Config.Settings.GetTournament(dialog.Name);
                        if (checkTournament != null || checkLeague != null)
                            if (MessageBox.Show("An event with the name \"" + league.Name + "\" already " +
                                                "exists. Event names must be unique.", "Validation Error",
                                                MessageBoxButtons.RetryCancel,
                                                MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) ==
                                DialogResult.Cancel)
                                return;
                            else
                                continue;

                        Config.Settings.Leagues.Add(league);
                        Config.Settings.SaveEvents();
                        return;
                    }
                    else
                        return;
                }
            }
        }