Add sort force-reverse

hold control when triggering the sort
sneaky linq to reverse a sort by:
* re-doing the initial sort, then
* reversing the sorted pkm data by using a throwaway increment
* re-doing the final sort
This commit is contained in:
Kurt 2018-04-30 21:39:12 -07:00
parent 8dcee4e0ee
commit 4c9177fcb3
4 changed files with 23 additions and 7 deletions

View file

@ -128,6 +128,19 @@ namespace PKHeX.Core
.FinalSortBy(); .FinalSortBy();
} }
/// <summary>
/// Sorts an <see cref="Enumerable"/> list of <see cref="PKM"/> objects in reverse.
/// </summary>
/// <param name="list">Source list to revese sort</param>
/// <returns>Enumerable list that is sorted</returns>
public static IEnumerable<PKM> ReverseSort(this IEnumerable<PKM> list)
{
int i = 0;
return list.InitialSortBy()
.ThenByDescending(z => i++)
.FinalSortBy();
}
/// <summary> /// <summary>
/// Common pre-filtering of <see cref="PKM"/> data. /// Common pre-filtering of <see cref="PKM"/> data.
/// </summary> /// </summary>

View file

@ -588,7 +588,7 @@ namespace PKHeX.Core
} }
public virtual bool IsSlotInBattleTeam(int box, int slot) => false; public virtual bool IsSlotInBattleTeam(int box, int slot) => false;
public void SortBoxes(int BoxStart = 0, int BoxEnd = -1, Func<IEnumerable<PKM>, IEnumerable<PKM>> sortMethod = null) public void SortBoxes(int BoxStart = 0, int BoxEnd = -1, Func<IEnumerable<PKM>, IEnumerable<PKM>> sortMethod = null, bool reverse = false)
{ {
var BD = BoxData; var BD = BoxData;
int start = BoxSlotCount * BoxStart; int start = BoxSlotCount * BoxStart;
@ -597,6 +597,8 @@ namespace PKHeX.Core
Section = Section.Take(BoxSlotCount * (BoxEnd - BoxStart + 1)); Section = Section.Take(BoxSlotCount * (BoxEnd - BoxStart + 1));
var Sorted = (sortMethod ?? PKMSorting.OrderBySpecies)(Section); var Sorted = (sortMethod ?? PKMSorting.OrderBySpecies)(Section);
if (reverse)
Sorted = Sorted.ReverseSort();
Sorted.CopyTo(BD, start); Sorted.CopyTo(BD, start);
BoxData = BD; BoxData = BD;

View file

@ -395,18 +395,18 @@ namespace PKHeX.WinForms.Controls
SAV.ClearBoxes(Box.CurrentBox, Box.CurrentBox, criteria); SAV.ClearBoxes(Box.CurrentBox, Box.CurrentBox, criteria);
FinishBoxManipulation(MsgSaveBoxClearCurrentSuccess, false); FinishBoxManipulation(MsgSaveBoxClearCurrentSuccess, false);
} }
public void SortAll(Func<IEnumerable<PKM>, IEnumerable<PKM>> sorter) public void SortAll(Func<IEnumerable<PKM>, IEnumerable<PKM>> sorter, bool reverse)
{ {
if (!CanManipulateRegion(0, SAV.BoxCount - 1, MsgSaveBoxSortAll, MsgSaveBoxSortAllFailBattle)) if (!CanManipulateRegion(0, SAV.BoxCount - 1, MsgSaveBoxSortAll, MsgSaveBoxSortAllFailBattle))
return; return;
SAV.SortBoxes(sortMethod: sorter); SAV.SortBoxes(sortMethod: sorter, reverse: reverse);
FinishBoxManipulation(MsgSaveBoxSortAllSuccess, true); FinishBoxManipulation(MsgSaveBoxSortAllSuccess, true);
} }
public void SortCurrent(Func<IEnumerable<PKM>, IEnumerable<PKM>> sorter) public void SortCurrent(Func<IEnumerable<PKM>, IEnumerable<PKM>> sorter, bool reverse)
{ {
if (!CanManipulateRegion(Box.CurrentBox, Box.CurrentBox, MsgSaveBoxSortCurrent, MsgSaveBoxSortCurrentFailBattle)) if (!CanManipulateRegion(Box.CurrentBox, Box.CurrentBox, MsgSaveBoxSortCurrent, MsgSaveBoxSortCurrentFailBattle))
return; return;
SAV.SortBoxes(Box.CurrentBox, Box.CurrentBox, sorter); SAV.SortBoxes(Box.CurrentBox, Box.CurrentBox, sorter, reverse: reverse);
FinishBoxManipulation(MsgSaveBoxSortCurrentSuccess, false); FinishBoxManipulation(MsgSaveBoxSortCurrentSuccess, false);
} }
public void ModifyAll(Action<PKM> action) public void ModifyAll(Action<PKM> action)

View file

@ -71,10 +71,11 @@ namespace PKHeX.WinForms.Controls
void Sort(Func<IEnumerable<PKM>, IEnumerable<PKM>> sorter) void Sort(Func<IEnumerable<PKM>, IEnumerable<PKM>> sorter)
{ {
bool reverse = Control.ModifierKeys.HasFlag(Keys.Control);
if (Control.ModifierKeys.HasFlag(Keys.Shift)) if (Control.ModifierKeys.HasFlag(Keys.Shift))
sav.SortAll(sorter); sav.SortAll(sorter, reverse);
else else
sav.SortCurrent(sorter); sav.SortCurrent(sorter, reverse);
} }
void Modify(Action<PKM> action) void Modify(Action<PKM> action)