A game framework written with osu! in mind.

Rename RearrangeableListItem

+92 -79
+9 -9
osu.Framework.Tests/Visual/UserInterface/TestSceneRearrangeableListContainer.cs
··· 44 44 string itemString = i.ToString(); 45 45 46 46 AddStep($"add item \"{itemString}\"", () => list.Items.Add(itemString)); 47 - AddAssert($"last item is \"{itemString}\"", () => list.ChildrenOfType<DrawableRearrangeableListItem<string>>().Last().Model == itemString); 47 + AddAssert($"last item is \"{itemString}\"", () => list.ChildrenOfType<RearrangeableListItem<string>>().Last().Model == itemString); 48 48 } 49 49 } 50 50 ··· 62 62 string itemString = i.ToString(); 63 63 64 64 AddStep($"remove item \"{itemString}\"", () => list.Items.Remove(itemString)); 65 - AddAssert($"first item is not \"{itemString}\"", () => list.ChildrenOfType<DrawableRearrangeableListItem<string>>().FirstOrDefault()?.Model != itemString); 65 + AddAssert($"first item is not \"{itemString}\"", () => list.ChildrenOfType<RearrangeableListItem<string>>().FirstOrDefault()?.Model != itemString); 66 66 } 67 67 } 68 68 ··· 77 77 78 78 AddStep("clear items", () => list.Items.Clear()); 79 79 80 - AddAssert("no items contained", () => !list.ChildrenOfType<DrawableRearrangeableListItem<string>>().Any()); 80 + AddAssert("no items contained", () => !list.ChildrenOfType<RearrangeableListItem<string>>().Any()); 81 81 } 82 82 83 83 [Test] ··· 263 263 () => list.Items.SequenceEqual(sequence.Select(value => value.ToString()))); 264 264 } 265 265 266 - private DrawableRearrangeableListItem<string> getItem(int index) 267 - => list.ChildrenOfType<DrawableRearrangeableListItem<string>>().First(i => i.Model == index.ToString()); 266 + private RearrangeableListItem<string> getItem(int index) 267 + => list.ChildrenOfType<RearrangeableListItem<string>>().First(i => i.Model == index.ToString()); 268 268 269 - private BasicDrawableRearrangeableListItem<string>.Button getDragger(int index) 270 - => list.ChildrenOfType<BasicDrawableRearrangeableListItem<string>>().First(i => i.Model == index.ToString()) 271 - .ChildrenOfType<BasicDrawableRearrangeableListItem<string>.Button>().First(); 269 + private BasicRearrangeableListItem<string>.Button getDragger(int index) 270 + => list.ChildrenOfType<BasicRearrangeableListItem<string>>().First(i => i.Model == index.ToString()) 271 + .ChildrenOfType<BasicRearrangeableListItem<string>.Button>().First(); 272 272 273 273 private class TestRearrangeableList : BasicRearrangeableListContainer<string> 274 274 { 275 275 public float ScrollPosition => ScrollContainer.Current; 276 276 277 277 public void ScrollTo(string item) 278 - => ScrollContainer.ScrollTo(this.ChildrenOfType<BasicDrawableRearrangeableListItem<string>>().First(i => i.Model == item), false); 278 + => ScrollContainer.ScrollTo(this.ChildrenOfType<BasicRearrangeableListItem<string>>().First(i => i.Model == item), false); 279 279 } 280 280 } 281 281 }
-52
osu.Framework/Graphics/Containers/DrawableRearrangeableListItem.cs
··· 1 - // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. 2 - // See the LICENCE file in the repository root for full licence text. 3 - 4 - using System; 5 - using osu.Framework.Input.Events; 6 - using osuTK; 7 - 8 - namespace osu.Framework.Graphics.Containers 9 - { 10 - public abstract class DrawableRearrangeableListItem<TModel> : CompositeDrawable 11 - { 12 - internal Action<DrawableRearrangeableListItem<TModel>, DragStartEvent> StartArrangement; 13 - 14 - internal Action<DrawableRearrangeableListItem<TModel>, DragEvent> Arrange; 15 - 16 - internal Action<DrawableRearrangeableListItem<TModel>, DragEndEvent> EndArrangement; 17 - 18 - /// <summary> 19 - /// The item this <see cref="DrawableRearrangeableListItem{TModel}"/> represents. 20 - /// </summary> 21 - public TModel Model; 22 - 23 - /// <summary> 24 - /// Creates a new <see cref="DrawableRearrangeableListItem{TModel}"/>. 25 - /// </summary> 26 - /// <param name="item">The item to represent.</param> 27 - protected DrawableRearrangeableListItem(TModel item) 28 - { 29 - Model = item; 30 - } 31 - 32 - /// <summary> 33 - /// Returns whether the item is currently able to be dragged. 34 - /// </summary> 35 - protected virtual bool IsDraggableAt(Vector2 screenSpacePos) => true; 36 - 37 - protected override bool OnDragStart(DragStartEvent e) 38 - { 39 - if (IsDraggableAt(e.ScreenSpaceMouseDownPosition)) 40 - { 41 - StartArrangement?.Invoke(this, e); 42 - return true; 43 - } 44 - 45 - return false; 46 - } 47 - 48 - protected override void OnDrag(DragEvent e) => Arrange?.Invoke(this, e); 49 - 50 - protected override void OnDragEnd(DragEndEvent e) => EndArrangement?.Invoke(this, e); 51 - } 52 - }
+12 -12
osu.Framework/Graphics/Containers/RearrangeableListContainer.cs
··· 38 38 protected readonly ScrollContainer<Drawable> ScrollContainer; 39 39 40 40 /// <summary> 41 - /// The <see cref="FillFlowContainer"/> containing of all the <see cref="DrawableRearrangeableListItem{TModel}"/>s. 41 + /// The <see cref="FillFlowContainer"/> containing of all the <see cref="RearrangeableListItem{TModel}"/>s. 42 42 /// </summary> 43 - protected readonly FillFlowContainer<DrawableRearrangeableListItem<TModel>> ListContainer; 43 + protected readonly FillFlowContainer<RearrangeableListItem<TModel>> ListContainer; 44 44 45 45 /// <summary> 46 - /// The mapping of <see cref="TModel"/> to <see cref="DrawableRearrangeableListItem{TModel}"/>. 46 + /// The mapping of <see cref="TModel"/> to <see cref="RearrangeableListItem{TModel}"/>. 47 47 /// </summary> 48 - protected IReadOnlyDictionary<TModel, DrawableRearrangeableListItem<TModel>> ItemMap => itemMap; 48 + protected IReadOnlyDictionary<TModel, RearrangeableListItem<TModel>> ItemMap => itemMap; 49 49 50 - private readonly Dictionary<TModel, DrawableRearrangeableListItem<TModel>> itemMap = new Dictionary<TModel, DrawableRearrangeableListItem<TModel>>(); 51 - private DrawableRearrangeableListItem<TModel> currentlyDraggedItem; 50 + private readonly Dictionary<TModel, RearrangeableListItem<TModel>> itemMap = new Dictionary<TModel, RearrangeableListItem<TModel>>(); 51 + private RearrangeableListItem<TModel> currentlyDraggedItem; 52 52 private Vector2 screenSpaceDragPosition; 53 53 private bool isCurrentlyRearranging; // Will be true only for the duration that indices are being moved around 54 54 ··· 125 125 ListContainer.SetLayoutPosition(itemMap[Items[i]], i); 126 126 } 127 127 128 - private void startArrangement(DrawableRearrangeableListItem<TModel> item, DragStartEvent e) 128 + private void startArrangement(RearrangeableListItem<TModel> item, DragStartEvent e) 129 129 { 130 130 currentlyDraggedItem = item; 131 131 screenSpaceDragPosition = e.ScreenSpaceMousePosition; 132 132 } 133 133 134 - private void arrange(DrawableRearrangeableListItem<TModel> item, DragEvent e) => screenSpaceDragPosition = e.ScreenSpaceMousePosition; 134 + private void arrange(RearrangeableListItem<TModel> item, DragEvent e) => screenSpaceDragPosition = e.ScreenSpaceMousePosition; 135 135 136 - private void endArrangement(DrawableRearrangeableListItem<TModel> item, DragEndEvent e) => currentlyDraggedItem = null; 136 + private void endArrangement(RearrangeableListItem<TModel> item, DragEndEvent e) => currentlyDraggedItem = null; 137 137 138 138 protected override void Update() 139 139 { ··· 226 226 /// <summary> 227 227 /// Creates the <see cref="FillFlowContainer{DrawableRearrangeableListItem}"/> for the items. 228 228 /// </summary> 229 - protected virtual FillFlowContainer<DrawableRearrangeableListItem<TModel>> CreateListFillFlowContainer() => new FillFlowContainer<DrawableRearrangeableListItem<TModel>>(); 229 + protected virtual FillFlowContainer<RearrangeableListItem<TModel>> CreateListFillFlowContainer() => new FillFlowContainer<RearrangeableListItem<TModel>>(); 230 230 231 231 /// <summary> 232 232 /// Creates the <see cref="ScrollContainer"/> for the list of items. ··· 237 237 /// Creates the <see cref="Drawable"/> representation of an item. 238 238 /// </summary> 239 239 /// <param name="item">The item to create the <see cref="Drawable"/> representation of.</param> 240 - /// <returns>The <see cref="DrawableRearrangeableListItem{T}"/>.</returns> 241 - protected abstract DrawableRearrangeableListItem<TModel> CreateDrawable(TModel item); 240 + /// <returns>The <see cref="RearrangeableListItem{TModel}"/>.</returns> 241 + protected abstract RearrangeableListItem<TModel> CreateDrawable(TModel item); 242 242 } 243 243 }
+65
osu.Framework/Graphics/Containers/RearrangeableListItem.cs
··· 1 + // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. 2 + // See the LICENCE file in the repository root for full licence text. 3 + 4 + using System; 5 + using osu.Framework.Input.Events; 6 + using osuTK; 7 + 8 + namespace osu.Framework.Graphics.Containers 9 + { 10 + /// <summary> 11 + /// An item of a <see cref="RearrangeableListContainer{TModel}"/>. 12 + /// </summary> 13 + /// <typeparam name="TModel"></typeparam> 14 + public abstract class RearrangeableListItem<TModel> : CompositeDrawable 15 + { 16 + /// <summary> 17 + /// Invoked on drag start, if an arrangement should be started. 18 + /// </summary> 19 + internal Action<RearrangeableListItem<TModel>, DragStartEvent> StartArrangement; 20 + 21 + /// <summary> 22 + /// Invoked on drag, if this item is being arranged. 23 + /// </summary> 24 + internal Action<RearrangeableListItem<TModel>, DragEvent> Arrange; 25 + 26 + /// <summary> 27 + /// Invoked on drag end, if this item is being arranged. 28 + /// </summary> 29 + internal Action<RearrangeableListItem<TModel>, DragEndEvent> EndArrangement; 30 + 31 + /// <summary> 32 + /// The item this <see cref="RearrangeableListItem{TModel}"/> represents. 33 + /// </summary> 34 + public TModel Model; 35 + 36 + /// <summary> 37 + /// Creates a new <see cref="RearrangeableListItem{TModel}"/>. 38 + /// </summary> 39 + /// <param name="item">The item to represent.</param> 40 + protected RearrangeableListItem(TModel item) 41 + { 42 + Model = item; 43 + } 44 + 45 + /// <summary> 46 + /// Whether the item is able to be dragged at the given screen-space position. 47 + /// </summary> 48 + protected virtual bool IsDraggableAt(Vector2 screenSpacePos) => true; 49 + 50 + protected override bool OnDragStart(DragStartEvent e) 51 + { 52 + if (IsDraggableAt(e.ScreenSpaceMouseDownPosition)) 53 + { 54 + StartArrangement?.Invoke(this, e); 55 + return true; 56 + } 57 + 58 + return false; 59 + } 60 + 61 + protected override void OnDrag(DragEvent e) => Arrange?.Invoke(this, e); 62 + 63 + protected override void OnDragEnd(DragEndEvent e) => EndArrangement?.Invoke(this, e); 64 + } 65 + }
+6 -6
osu.Framework/Graphics/UserInterface/BasicRearrangeableListContainer.cs
··· 14 14 { 15 15 public class BasicRearrangeableListContainer<TModel> : RearrangeableListContainer<TModel> 16 16 { 17 - protected override FillFlowContainer<DrawableRearrangeableListItem<TModel>> CreateListFillFlowContainer() => base.CreateListFillFlowContainer().With(d => 17 + protected override FillFlowContainer<RearrangeableListItem<TModel>> CreateListFillFlowContainer() => base.CreateListFillFlowContainer().With(d => 18 18 { 19 19 d.LayoutDuration = 160; 20 20 d.LayoutEasing = Easing.OutQuint; ··· 28 28 d.Padding = new MarginPadding(5); 29 29 }); 30 30 31 - protected sealed override DrawableRearrangeableListItem<TModel> CreateDrawable(TModel item) => CreateBasicItem(item).With(d => 31 + protected sealed override RearrangeableListItem<TModel> CreateDrawable(TModel item) => CreateBasicItem(item).With(d => 32 32 { 33 33 d.RequestRemoval += _ => Items.Remove(item); 34 34 }); 35 35 36 - protected virtual BasicDrawableRearrangeableListItem<TModel> CreateBasicItem(TModel item) => new BasicDrawableRearrangeableListItem<TModel>(item); 36 + protected virtual BasicRearrangeableListItem<TModel> CreateBasicItem(TModel item) => new BasicRearrangeableListItem<TModel>(item); 37 37 } 38 38 39 - public class BasicDrawableRearrangeableListItem<TModel> : DrawableRearrangeableListItem<TModel> 39 + public class BasicRearrangeableListItem<TModel> : RearrangeableListItem<TModel> 40 40 { 41 - internal Action<DrawableRearrangeableListItem<TModel>> RequestRemoval; 41 + internal Action<RearrangeableListItem<TModel>> RequestRemoval; 42 42 43 43 private readonly bool removable; 44 44 private Drawable dragHandle; 45 45 46 - public BasicDrawableRearrangeableListItem(TModel item, bool removable = false) 46 + public BasicRearrangeableListItem(TModel item, bool removable = false) 47 47 : base(item) 48 48 { 49 49 this.removable = removable;