/// <summary>
        /// Initializes a new instance of the <see cref="ResearchSettings"/> class.
        /// </summary>
        public ResearchSettings()
        {
            // Add default columns
            var defaultColumns = new ResearchColumn[]
            {
                ResearchColumn.Agent,
                ResearchColumn.Field,
                ResearchColumn.CurrentRP,
                ResearchColumn.PointsPerDay,
                ResearchColumn.Station
            };

            Columns = EnumExtensions.GetValues<ResearchColumn>().Where(x => x != ResearchColumn.None).Select(x =>
                new ResearchColumnSettings { Column = x, Visible = defaultColumns.Contains(x), Width = -1 }).ToArray();
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ResearchSettings"/> class.
        /// </summary>
        public ResearchSettings()
        {
            // Add default columns
            var defaultColumns = new ResearchColumn[]
            {
                ResearchColumn.Agent,
                ResearchColumn.Field,
                ResearchColumn.CurrentRP,
                ResearchColumn.PointsPerDay,
                ResearchColumn.Station
            };

            Columns = EnumExtensions.GetValues <ResearchColumn>().Where(x => x != ResearchColumn.None).Select(x =>
                                                                                                              new ResearchColumnSettings {
                Column = x, Visible = defaultColumns.Contains(x), Width = -1
            }).ToArray();
        }
        /// <summary>
        /// Updates the listview sub-item.
        /// </summary>
        /// <param name="order"></param>
        /// <param name="item"></param>
        /// <param name="column"></param>
        private void SetColumn(ResearchPoint researchPoint, ListViewItem.ListViewSubItem item, ResearchColumn column)
        {
            switch (column)
            {
                case ResearchColumn.Agent:
                    item.Text = researchPoint.AgentName;
                    break;

                case ResearchColumn.Level:
                    item.Text = researchPoint.AgentLevel.ToString();
                    break;

                case ResearchColumn.Quality:
                    item.Text = researchPoint.AgentQuality.ToString();
                    break;

                case ResearchColumn.Field:
                    item.Text = researchPoint.Field;
                    break;

                case ResearchColumn.CurrentRP:
                    item.Text = researchPoint.CurrentRP.ToString("N2");
                    break;

                case ResearchColumn.PointsPerDay:
                    item.Text = researchPoint.PointsPerDay.ToString("N2");
                    break;

                case ResearchColumn.StartDate:
                    item.Text = researchPoint.StartDate.ToLocalTime().ToString();
                    break;

                case ResearchColumn.Location:
                    item.Text = researchPoint.Station.FullLocation;
                    break;

                case ResearchColumn.Region:
                    item.Text = researchPoint.Station.SolarSystem.Constellation.Region.Name;
                    break;

                case ResearchColumn.SolarSystem:
                    item.Text = researchPoint.Station.SolarSystem.Name;
                    break;

                case ResearchColumn.Station:
                    item.Text = researchPoint.Station.Name;
                    break;

                default:
                    //return;
                    throw new NotImplementedException();
            }
        }
        /// <summary>
        /// When the user clicks a column header, we update the sorting.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lvResearchPoints_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            var column = (ResearchColumn)lvResearchPoints.Columns[e.Column].Tag;
            if (m_sortCriteria == column)
            {
                m_sortAscending = !m_sortAscending;
            }
            else
            {
                m_sortCriteria = column;
                m_sortAscending = true;
            }

            UpdateContent();
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ResearchPointComparer"/> class.
 /// </summary>
 /// <param name="column">The industry job column.</param>
 /// <param name="isAscending">Is ascending flag.</param>
 public ResearchPointComparer(ResearchColumn column, bool isAscending)
 {
     m_column      = column;
     m_isAscending = isAscending;
 }
        /// <summary>
        /// When the user clicks a column header, we update the sorting.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void listView_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            ResearchColumn column = (ResearchColumn)lvResearchPoints.Columns[e.Column].Tag;
            if (m_sortCriteria == column)
                m_sortAscending = !m_sortAscending;
            else
            {
                m_sortCriteria = column;
                m_sortAscending = true;
            }

            m_isUpdatingColumns = true;

            // Updates the item sorter
            UpdateSort();

            m_isUpdatingColumns = false;
        }
        /// <summary>
        /// Updates the listview sub-item.
        /// </summary>
        /// <param name="researchPoint"></param>
        /// <param name="item"></param>
        /// <param name="column"></param>
        private static void SetColumn(ResearchPoint researchPoint, ListViewItem.ListViewSubItem item, ResearchColumn column)
        {
            ConquerableStation outpost = researchPoint.Station as ConquerableStation;

            switch (column)
            {
                case ResearchColumn.Agent:
                    item.Text = researchPoint.AgentName;
                    break;
                case ResearchColumn.Level:
                    item.Text = researchPoint.AgentLevel.ToString(CultureConstants.DefaultCulture);
                    break;
                case ResearchColumn.Field:
                    item.Text = researchPoint.Field;
                    break;
                case ResearchColumn.CurrentRP:
                    item.Text = researchPoint.CurrentRP.ToNumericString(2);
                    break;
                case ResearchColumn.PointsPerDay:
                    item.Text = researchPoint.PointsPerDay.ToNumericString(2);
                    break;
                case ResearchColumn.StartDate:
                    item.Text = $"{researchPoint.StartDate.ToLocalTime()}";
                    break;
                case ResearchColumn.Location:
                    item.Text = outpost != null
                        ? outpost.FullLocation
                        : researchPoint.Station.FullLocation;
                    break;
                case ResearchColumn.Region:
                    item.Text = researchPoint.Station.SolarSystem.Constellation.Region.Name;
                    break;
                case ResearchColumn.SolarSystem:
                    item.Text = researchPoint.Station.SolarSystem.Name;
                    item.ForeColor = researchPoint.Station.SolarSystem.SecurityLevelColor;
                    break;
                case ResearchColumn.Station:
                    item.Text = outpost != null
                        ? outpost.FullName
                        : researchPoint.Station.Name;
                    break;
                case ResearchColumn.Quality:
                    break;
                default:
                    throw new NotImplementedException();
            }
        }