mirror of
https://github.com/ppy/osu.git
synced 2025-01-21 07:33:12 +08:00
Flatten DrawableRoomPlaylistWithResults into base class
This commit is contained in:
parent
26f6c5e5a5
commit
be2dbf42c3
@ -21,6 +21,11 @@ namespace osu.Game.Screens.OnlinePlay
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public Action<PlaylistItem> DeletionRequested;
|
public Action<PlaylistItem> DeletionRequested;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Invoked to request showing the results for an item.
|
||||||
|
/// </summary>
|
||||||
|
public Action<PlaylistItem> ShowResultsRequested;
|
||||||
|
|
||||||
private bool allowReordering;
|
private bool allowReordering;
|
||||||
|
|
||||||
public bool AllowReordering
|
public bool AllowReordering
|
||||||
@ -63,6 +68,20 @@ namespace osu.Game.Screens.OnlinePlay
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool allowShowingResults;
|
||||||
|
|
||||||
|
public bool AllowShowingResults
|
||||||
|
{
|
||||||
|
get => allowShowingResults;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
allowShowingResults = value;
|
||||||
|
|
||||||
|
foreach (var item in ListContainer.OfType<DrawableRoomPlaylistItem>())
|
||||||
|
item.AllowShowingResults = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool showItemOwners;
|
private bool showItemOwners;
|
||||||
|
|
||||||
public bool ShowItemOwners
|
public bool ShowItemOwners
|
||||||
@ -94,7 +113,9 @@ namespace osu.Game.Screens.OnlinePlay
|
|||||||
AllowReordering = AllowReordering,
|
AllowReordering = AllowReordering,
|
||||||
AllowDeletion = AllowDeletion,
|
AllowDeletion = AllowDeletion,
|
||||||
AllowSelection = AllowSelection,
|
AllowSelection = AllowSelection,
|
||||||
|
AllowShowingResults = AllowShowingResults,
|
||||||
ShowItemOwner = ShowItemOwners,
|
ShowItemOwner = ShowItemOwners,
|
||||||
|
ShowResultsRequested = i => ShowResultsRequested?.Invoke(i)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,7 @@ namespace osu.Game.Screens.OnlinePlay
|
|||||||
public const float ICON_HEIGHT = 34;
|
public const float ICON_HEIGHT = 34;
|
||||||
|
|
||||||
public Action<PlaylistItem> RequestDeletion;
|
public Action<PlaylistItem> RequestDeletion;
|
||||||
|
public Action<PlaylistItem> ShowResultsRequested;
|
||||||
|
|
||||||
public readonly Bindable<PlaylistItem> SelectedItem = new Bindable<PlaylistItem>();
|
public readonly Bindable<PlaylistItem> SelectedItem = new Bindable<PlaylistItem>();
|
||||||
|
|
||||||
@ -53,6 +54,7 @@ namespace osu.Game.Screens.OnlinePlay
|
|||||||
private FillFlowContainer buttonsFlow;
|
private FillFlowContainer buttonsFlow;
|
||||||
private UpdateableAvatar ownerAvatar;
|
private UpdateableAvatar ownerAvatar;
|
||||||
private Drawable removeButton;
|
private Drawable removeButton;
|
||||||
|
private Drawable showResultsButton;
|
||||||
|
|
||||||
private readonly IBindable<bool> valid = new Bindable<bool>();
|
private readonly IBindable<bool> valid = new Bindable<bool>();
|
||||||
|
|
||||||
@ -177,6 +179,20 @@ namespace osu.Game.Screens.OnlinePlay
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool allowShowingResults;
|
||||||
|
|
||||||
|
public bool AllowShowingResults
|
||||||
|
{
|
||||||
|
get => allowShowingResults;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
allowShowingResults = value;
|
||||||
|
|
||||||
|
if (showResultsButton != null)
|
||||||
|
showResultsButton.Alpha = value ? 1 : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool showItemOwner;
|
private bool showItemOwner;
|
||||||
|
|
||||||
public bool ShowItemOwner
|
public bool ShowItemOwner
|
||||||
@ -230,7 +246,7 @@ namespace osu.Game.Screens.OnlinePlay
|
|||||||
modDisplay.Current.Value = requiredMods.ToArray();
|
modDisplay.Current.Value = requiredMods.ToArray();
|
||||||
|
|
||||||
buttonsFlow.Clear();
|
buttonsFlow.Clear();
|
||||||
buttonsFlow.ChildrenEnumerable = CreateButtons();
|
buttonsFlow.ChildrenEnumerable = createButtons();
|
||||||
|
|
||||||
difficultyIconContainer.FadeInFromZero(500, Easing.OutQuint);
|
difficultyIconContainer.FadeInFromZero(500, Easing.OutQuint);
|
||||||
mainFillFlow.FadeInFromZero(500, Easing.OutQuint);
|
mainFillFlow.FadeInFromZero(500, Easing.OutQuint);
|
||||||
@ -344,7 +360,7 @@ namespace osu.Game.Screens.OnlinePlay
|
|||||||
Margin = new MarginPadding { Horizontal = 8 },
|
Margin = new MarginPadding { Horizontal = 8 },
|
||||||
AutoSizeAxes = Axes.Both,
|
AutoSizeAxes = Axes.Both,
|
||||||
Spacing = new Vector2(5),
|
Spacing = new Vector2(5),
|
||||||
ChildrenEnumerable = CreateButtons().Select(button => button.With(b =>
|
ChildrenEnumerable = createButtons().Select(button => button.With(b =>
|
||||||
{
|
{
|
||||||
b.Anchor = Anchor.Centre;
|
b.Anchor = Anchor.Centre;
|
||||||
b.Origin = Anchor.Centre;
|
b.Origin = Anchor.Centre;
|
||||||
@ -367,9 +383,14 @@ namespace osu.Game.Screens.OnlinePlay
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual IEnumerable<Drawable> CreateButtons() =>
|
private IEnumerable<Drawable> createButtons() =>
|
||||||
new[]
|
new[]
|
||||||
{
|
{
|
||||||
|
showResultsButton = new ShowResultsButton
|
||||||
|
{
|
||||||
|
Action = () => ShowResultsRequested?.Invoke(Item),
|
||||||
|
Alpha = AllowShowingResults ? 1 : 0,
|
||||||
|
},
|
||||||
Item.Beatmap.Value == null ? Empty() : new PlaylistDownloadButton(Item),
|
Item.Beatmap.Value == null ? Empty() : new PlaylistDownloadButton(Item),
|
||||||
removeButton = new PlaylistRemoveButton
|
removeButton = new PlaylistRemoveButton
|
||||||
{
|
{
|
||||||
@ -454,6 +475,23 @@ namespace osu.Game.Screens.OnlinePlay
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class ShowResultsButton : IconButton
|
||||||
|
{
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load(OsuColour colours)
|
||||||
|
{
|
||||||
|
Icon = FontAwesome.Solid.ChartPie;
|
||||||
|
TooltipText = "View results";
|
||||||
|
|
||||||
|
Add(new Box
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Depth = float.MaxValue,
|
||||||
|
Colour = colours.Gray4,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// For now, this is the same implementation as in PanelBackground, but supports a beatmap info rather than a working beatmap
|
// For now, this is the same implementation as in PanelBackground, but supports a beatmap info rather than a working beatmap
|
||||||
private class PanelBackground : Container // todo: should be a buffered container (https://github.com/ppy/osu-framework/issues/3222)
|
private class PanelBackground : Container // todo: should be a buffered container (https://github.com/ppy/osu-framework/issues/3222)
|
||||||
{
|
{
|
||||||
|
@ -1,69 +0,0 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using osu.Framework.Allocation;
|
|
||||||
using osu.Framework.Graphics;
|
|
||||||
using osu.Framework.Graphics.Shapes;
|
|
||||||
using osu.Framework.Graphics.Sprites;
|
|
||||||
using osu.Game.Graphics;
|
|
||||||
using osu.Game.Graphics.Containers;
|
|
||||||
using osu.Game.Graphics.UserInterface;
|
|
||||||
using osu.Game.Online.Rooms;
|
|
||||||
|
|
||||||
namespace osu.Game.Screens.OnlinePlay
|
|
||||||
{
|
|
||||||
public class DrawableRoomPlaylistWithResults : DrawableRoomPlaylist
|
|
||||||
{
|
|
||||||
public Action<PlaylistItem> RequestShowResults;
|
|
||||||
|
|
||||||
private readonly bool showItemOwner;
|
|
||||||
|
|
||||||
public DrawableRoomPlaylistWithResults(bool showItemOwner = false)
|
|
||||||
: base(false, true, showItemOwner)
|
|
||||||
{
|
|
||||||
this.showItemOwner = showItemOwner;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override OsuRearrangeableListItem<PlaylistItem> CreateOsuDrawable(PlaylistItem item) =>
|
|
||||||
new DrawableRoomPlaylistItemWithResults(item, false, true, showItemOwner)
|
|
||||||
{
|
|
||||||
RequestShowResults = () => RequestShowResults(item),
|
|
||||||
SelectedItem = { BindTarget = SelectedItem },
|
|
||||||
};
|
|
||||||
|
|
||||||
private class DrawableRoomPlaylistItemWithResults : DrawableRoomPlaylistItem
|
|
||||||
{
|
|
||||||
public Action RequestShowResults;
|
|
||||||
|
|
||||||
public DrawableRoomPlaylistItemWithResults(PlaylistItem item, bool allowEdit, bool allowSelection, bool showItemOwner)
|
|
||||||
: base(item, allowEdit, allowSelection, showItemOwner)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override IEnumerable<Drawable> CreateButtons() =>
|
|
||||||
base.CreateButtons().Prepend(new FilledIconButton
|
|
||||||
{
|
|
||||||
Icon = FontAwesome.Solid.ChartPie,
|
|
||||||
Action = () => RequestShowResults?.Invoke(),
|
|
||||||
TooltipText = "View results"
|
|
||||||
});
|
|
||||||
|
|
||||||
private class FilledIconButton : IconButton
|
|
||||||
{
|
|
||||||
[BackgroundDependencyLoader]
|
|
||||||
private void load(OsuColour colours)
|
|
||||||
{
|
|
||||||
Add(new Box
|
|
||||||
{
|
|
||||||
RelativeSizeAxes = Axes.Both,
|
|
||||||
Depth = float.MaxValue,
|
|
||||||
Colour = colours.Gray4,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -88,12 +88,14 @@ namespace osu.Game.Screens.OnlinePlay.Playlists
|
|||||||
new Drawable[] { new OverlinedPlaylistHeader(), },
|
new Drawable[] { new OverlinedPlaylistHeader(), },
|
||||||
new Drawable[]
|
new Drawable[]
|
||||||
{
|
{
|
||||||
new DrawableRoomPlaylistWithResults
|
new DrawableRoomPlaylist
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Items = { BindTarget = Room.Playlist },
|
Items = { BindTarget = Room.Playlist },
|
||||||
SelectedItem = { BindTarget = SelectedItem },
|
SelectedItem = { BindTarget = SelectedItem },
|
||||||
RequestShowResults = item =>
|
AllowSelection = true,
|
||||||
|
AllowShowingResults = true,
|
||||||
|
ShowResultsRequested = item =>
|
||||||
{
|
{
|
||||||
Debug.Assert(RoomId.Value != null);
|
Debug.Assert(RoomId.Value != null);
|
||||||
ParentScreen?.Push(new PlaylistsResultsScreen(null, RoomId.Value.Value, item, false));
|
ParentScreen?.Push(new PlaylistsResultsScreen(null, RoomId.Value.Value, item, false));
|
||||||
|
Loading…
Reference in New Issue
Block a user