예제 #1
0
파일: BasePlan.cs 프로젝트: henrikja/EVEMon
        /// <summary>
        /// Sort this plan
        /// </summary>
        /// <param name="sort"></param>
        /// <param name="reverseOrder"></param>
        /// <param name="groupByPriority"></param>
        private void Sort(PlanEntrySort sort, bool reverseOrder, bool groupByPriority)
        {
            // Perform the sort
            IEnumerable <PlanEntry> entries = new PlanEntrySorter(Character, Items, sort, reverseOrder, groupByPriority).Sort();

            // Update plan
            RebuildPlanFrom(entries);
        }
예제 #2
0
파일: BasePlan.cs 프로젝트: henrikja/EVEMon
        /// <summary>
        /// Sorts a plan according to the given settings.
        /// </summary>
        /// <param name="settings">The settings.</param>
        /// <exception cref="System.ArgumentNullException">settings</exception>
        public void Sort(PlanSorting settings)
        {
            settings.ThrowIfNull(nameof(settings));

            PlanEntrySort criteria = settings.Order == ThreeStateSortOrder.None ? PlanEntrySort.None : settings.Criteria;

            Sort(criteria, settings.Order == ThreeStateSortOrder.Descending, settings.GroupByPriority);
        }
예제 #3
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="character"></param>
 /// <param name="entries"></param>
 /// <param name="sort"></param>
 /// <param name="reverseOrder"></param>
 /// <param name="groupByPriority"></param>
 internal PlanSorter(BaseCharacter character, IEnumerable<PlanEntry> entries, PlanEntrySort sort, bool reverseOrder, bool groupByPriority)
 {
     m_sort = sort;
     m_entries = entries;
     m_reverseOrder = reverseOrder;
     m_groupByPriority = groupByPriority;
     m_character = character;
 }
예제 #4
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="character"></param>
 /// <param name="entries"></param>
 /// <param name="sort"></param>
 /// <param name="reverseOrder"></param>
 /// <param name="groupByPriority"></param>
 internal PlanSorter(BaseCharacter character, IEnumerable <PlanEntry> entries, PlanEntrySort sort, bool reverseOrder, bool groupByPriority)
 {
     m_sort            = sort;
     m_entries         = entries;
     m_reverseOrder    = reverseOrder;
     m_groupByPriority = groupByPriority;
     m_character       = character;
 }
예제 #5
0
        /// <summary>
        /// Sort this plan
        /// </summary>
        /// <param name="sort"></param>
        /// <param name="reverseOrder"></param>
        /// <param name="groupByPriority"></param>
        public void Sort(PlanEntrySort sort, bool reverseOrder, bool groupByPriority)
        {
            var sorter = new PlanSorter(m_character, m_items, sort, reverseOrder, groupByPriority);

            // Perform the sort
            var entries = sorter.Sort();

            // Update plan
            this.RebuildPlanFrom(entries);
        }
예제 #6
0
        /// <summary>
        /// Performs a simple ordering by the given sort criteria, based on the latest statistics.
        /// </summary>
        /// <param name="sort"></param>
        /// <param name="reverseOrder"></param>
        internal void SimpleSort(PlanEntrySort sort, bool reverseOrder)
        {
            // Apply simple sort operators
            switch (sort)
            {
                case PlanEntrySort.Name:
                    m_items.StableSort(PlanSorter.CompareByName);
                    break;
                case PlanEntrySort.Cost:
                    m_items.StableSort(PlanSorter.CompareByCost);
                    break;
                case PlanEntrySort.PrimaryAttribute:
                    m_items.StableSort(PlanSorter.CompareByPrimaryAttribute);
                    break;
                case PlanEntrySort.SecondaryAttribute:
                    m_items.StableSort(PlanSorter.CompareBySecondaryAttribute);
                    break;
                case PlanEntrySort.Priority:
                    m_items.StableSort(PlanSorter.CompareByPriority);
                    break;
                case PlanEntrySort.PlanGroup:
                    m_items.StableSort(PlanSorter.CompareByPlanGroup);
                    break;
                case PlanEntrySort.PercentCompleted:
                    m_items.StableSort(PlanSorter.CompareByPercentCompleted);
                    break;
                case PlanEntrySort.Rank:
                    m_items.StableSort(PlanSorter.CompareByRank);
                    break;
                case PlanEntrySort.Notes:
                    m_items.StableSort(PlanSorter.CompareByNotes);
                    break;
                case PlanEntrySort.PlanType:
                    m_items.StableSort(PlanSorter.CompareByPlanType);
                    break;
                case PlanEntrySort.TimeDifference:
                    m_items.StableSort(PlanSorter.CompareByTimeDifference);
                    break;
                case PlanEntrySort.TrainingTime:
                    m_items.StableSort(PlanSorter.CompareByTrainingTime);
                    break;
                case PlanEntrySort.TrainingTimeNatural:
                    m_items.StableSort(PlanSorter.CompareByTrainingTimeNatural);
                    break;
                case PlanEntrySort.SkillGroupDuration:
                    var skillGroupsDurations = new Dictionary<StaticSkillGroup, TimeSpan>();
                    m_items.StableSort((x, y) => PlanSorter.CompareBySkillGroupDuration(x, y, m_items, skillGroupsDurations));
                    break;
                case PlanEntrySort.SPPerHour:
                    m_items.StableSort(PlanSorter.CompareBySPPerHour);
                    break;
                case PlanEntrySort.SkillPointsRequired:
                    m_items.StableSort(PlanSorter.CompareBySkillPointsRequired);
                    break;
                default:
                    break;
            }

            // Reverse order
            if (reverseOrder) m_items.Reverse();
        }
예제 #7
0
        /// <summary>
        /// Performs a simple ordering by the given sort criteria, based on the latest statistics.
        /// </summary>
        /// <param name="sort"></param>
        /// <param name="reverseOrder"></param>
        internal void SimpleSort(PlanEntrySort sort, bool reverseOrder)
        {
            // Apply simple sort operators
            switch (sort)
            {
            case PlanEntrySort.None:
                break;

            case PlanEntrySort.Name:
                Items.StableSort(PlanEntrySorter.CompareByName);
                break;

            case PlanEntrySort.Cost:
                Items.StableSort(PlanEntrySorter.CompareByCost);
                break;

            case PlanEntrySort.PrimaryAttribute:
                Items.StableSort(PlanEntrySorter.CompareByPrimaryAttribute);
                break;

            case PlanEntrySort.SecondaryAttribute:
                Items.StableSort(PlanEntrySorter.CompareBySecondaryAttribute);
                break;

            case PlanEntrySort.Priority:
                Items.StableSort(PlanEntrySorter.CompareByPriority);
                break;

            case PlanEntrySort.PlanGroup:
                Items.StableSort(PlanEntrySorter.CompareByPlanGroup);
                break;

            case PlanEntrySort.PercentCompleted:
                Items.StableSort(PlanEntrySorter.CompareByPercentCompleted);
                break;

            case PlanEntrySort.Rank:
                Items.StableSort(PlanEntrySorter.CompareByRank);
                break;

            case PlanEntrySort.Notes:
                Items.StableSort(PlanEntrySorter.CompareByNotes);
                break;

            case PlanEntrySort.PlanType:
                Items.StableSort(PlanEntrySorter.CompareByPlanType);
                break;

            case PlanEntrySort.TimeDifference:
                Items.StableSort(PlanEntrySorter.CompareByTimeDifference);
                break;

            case PlanEntrySort.TrainingTime:
                Items.StableSort(PlanEntrySorter.CompareByTrainingTime);
                break;

            case PlanEntrySort.TrainingTimeNatural:
                Items.StableSort(PlanEntrySorter.CompareByTrainingTimeNatural);
                break;

            case PlanEntrySort.SkillGroupDuration:
                Dictionary <StaticSkillGroup, TimeSpan> skillGroupsDurations = new Dictionary <StaticSkillGroup, TimeSpan>();
                Items.StableSort((x, y) => PlanEntrySorter.CompareBySkillGroupDuration(x, y, Items, skillGroupsDurations));
                break;

            case PlanEntrySort.SPPerHour:
                Items.StableSort(PlanEntrySorter.CompareBySPPerHour);
                break;

            case PlanEntrySort.SkillPointsRequired:
                Items.StableSort(PlanEntrySorter.CompareBySkillPointsRequired);
                break;

            default:
                throw new NotImplementedException();
            }

            // Reverse order
            if (reverseOrder)
            {
                Items.Reverse();
            }
        }
예제 #8
0
 /// <summary>
 /// Gets a column by the given sort key. Null if not found or "none".
 /// </summary>
 /// <param name="criteria"></param>
 /// <returns></returns>
 private ColumnHeader GetColumn(PlanEntrySort criteria) => criteria == PlanEntrySort.None
    ? null
    : lvSkills.Columns.Cast<ColumnHeader>().FirstOrDefault(header => GetPlanSort(header) == criteria);
예제 #9
0
        /// <summary>
        /// Gets a column by the given sort key. Null if not found or "none".
        /// </summary>
        /// <param name="sortKey"></param>
        /// <returns></returns>
        private ColumnHeader GetColumn(PlanEntrySort criteria)
        {
            if (criteria == PlanEntrySort.None)
                return null;

            foreach (ColumnHeader header in lvSkills.Columns)
            {
                if (GetPlanSort(header) == criteria)
                    return header;
            }
            return null;
        }
예제 #10
0
        /// <summary>
        /// Updates the sort visual feedback for the specified column.
        /// </summary>
        /// <remarks>
        /// The ColumnHeader.ImageIndex has a bug under Vista that
        /// causes the value to be set to 0 if you set it to -1,
        /// resulting in the wrong icon being selected for the sort:
        /// https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=395739
        /// </remarks>
        private void UpdateSortVisualFeedback()
        {
            // Updates the menu icons on the left toolbar
            tsSortPriorities.Checked = m_plan.SortingPreferences.GroupByPriority;

            // Removes the icon from the old column
            var lastColumn = GetColumn(m_columnWithSortFeedback);
            if (lastColumn != null)
                lastColumn.ImageIndex = 6; // see xml comments
            m_columnWithSortFeedback = m_plan.SortingPreferences.Criteria;

            // Adds the icon on the new column
            if (m_plan.SortingPreferences.Criteria != PlanEntrySort.None && m_plan.SortingPreferences.Order != ThreeStateSortOrder.None)
            {
                var column = GetColumn(m_plan.SortingPreferences.Criteria);

                if (column != null)
                    column.ImageIndex = (m_plan.SortingPreferences.Order == ThreeStateSortOrder.Ascending ? ArrowUpIndex : ArrowDownIndex);
            }
        }